Недавно понадобилось получать список файлов из каталога средствами PHP, давно уже писал подобную функцию, но решил написать заново получилось гораздо интереснее...
/**
* Сканирует каталог и возвращает имена файлов и директорий, которые в нем есть.
*
* @param str путь к сканируемому каталогу
* @param str режим: files - вернет только имена файлов,
* folders - вернет только имена папок
* @return array
*/
function scanDir($path, $mode = null)
{
if (is_dir($path)) {
if ($dir = opendir($path)) {
//Сканируем директорию
while (false !== ($file = readdir($dir))) {
if ($file != "." && $file != "..") {
//Если папка
if(is_dir($path."/".$file)) {
$folders[] = $file;
}
//Если файл
else {
$files[] = $file;
}
}
}
}
closedir($dir);
}
switch ($mode) {
case 'files' :
return $files;
break;
case 'folders' :
return $folders;
break;
default :
return array("folders" => $folders, "files" => $files);
}
}
При обходе всех файлов в каталоге, необходимо не забывать о присутствии файлов с именами "." (точка) ".." (две точки), первое - ссылка на этот каталог, второе - ссылка на каталог уровнем выше. Если не учесть, последствия могут быть весьма неприятными особенно при рекурсивном обходе всех папок в том числе и вложенных. Так же лучше закрыть директорию после сканирования.
И в конце функция в зависимости от указанного режима вернет массив. Если вторым параметром передали строку - "files", то вернет индексный массив с именами файлов находящихся в этом каталоге, если "folders", то имена папок. По умолчанию вернет ассоциативный массив с ключами "folders" и "files", значениями которых, соответственно будут массивы имен файлов и директорий.
Комментарии
А чего это ваша функция public вдруг? ))
И, наверное стоит упомянуть, что вообщем-то, что в пхп5 функция такая уже есть (scandir) и то что вы привели можно использовать когда по каким-то печальным обстоятельствам вам приходится работать с пхп4. Или я чего то не понял?)
Public точно! Просто она была методом в классе ))
И по поводу того что не упомянул о существовании scandir в PHP5 - это конечно тоже косяк ))
Но речь идет о подходе (в контексте этого сайта), мало ли, что может понадобиться делать с каталогом, а тут сразу несколько функций для работы с файловой системой используются.
Да и все равно при использовании phpшного scandir(), потом прогонять в цикле по ифам, отсеивая либо папки либо файлы, если нужно только одно. Но это не в коем случае не призыв использовать самописные функции вместо пхпшных! ))