Функция сканирующая каталог

    Недавно понадобилось получать список файлов из каталога средствами 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", значениями которых, соответственно будут массивы имен файлов и директорий.


Раздел: Кодинг Рубрика: PHP


Добавлена: 16-03-2009 | Изменена: 16-03-2009 | Пользователем: admin | Просмотров: 3758

Комментарии

lcf 16-03-2009 14:55

А чего это ваша функция public вдруг? ))

И, наверное стоит упомянуть, что вообщем-то, что в пхп5 функция такая уже есть (scandir) и то что вы привели можно использовать когда по каким-то печальным обстоятельствам вам приходится работать с пхп4. Или я чего то не понял?)

admin 16-03-2009 15:20
Public точно! Просто она была  методом в классе ))

И по поводу того что не упомянул о существовании scandir в PHP5 - это конечно тоже косяк ))

Но речь идет о подходе (в контексте этого сайта), мало ли, что может понадобиться делать с каталогом, а тут сразу несколько функций для работы с файловой системой используются.
Да и все равно при использовании phpшного scandir(), потом прогонять в цикле по ифам, отсеивая либо папки либо файлы, если нужно только одно. Но это не в коем случае не призыв использовать самописные функции вместо пхпшных! ))


Оставить комментарий



капча

Комментарий будет опубликован после проверки модератором

Для подсветки синтаксиса используйте тэги:
<pre><code class="синтаксис" >код</code></pre>
Подерживаются следующие: cpp php javascript sql html-xml css ini

запчасти на toyota corolla

Рубрики