Рекурсивная проверка каталога с PHP
17 giugno 2008, 0:55 Open Source , PHP , Советы и хитрости 17 июня 2008, 12:55
Есть сценарии, которые вы должны всегда иметь под рукой, потому что в конечном итоге, что вам нужно в самые неожиданные моменты и случаи.
Эта функция в PHP, например, спас меня во многих случаях ненужной тратой времени, передавая в качестве аргумента строку, которая представляет собой полный путь для сканирования scan_directory_recursively функция возвращает массив, содержащий полную структуру указанного каталога.
Вы можете указать, как второй дополнительный аргумент, расширение или части текста, которые не обязательно будут появляться в имени файла. В основном это фильтр, чтобы исключить определенного класса результаты.
Например:
$dirs=scan_directory_recursively('/home/ivan/Tempo');
возвращает массив из всех каталогов и файлов в / главная / Иван / время, пока:
$dirs=scan_directory_recursively('/home/ivan/Tempo','.php');
возвращает массив из всех каталогов и файлов в / главная / Иван / время, за исключением файлов с расширением. PHP!
Это не мое дело, поэтому я прошу тех, кто использует в своих проектах не удалять ссылки на lixlpixel, Интернет-сайта, из которого они пришли.
Вот функция:
<? Php / / Рекурсивные функции PHP ------------------------- lixlpixel / / Scan_directory_recursively (каталог для сканирования, фильтр) / / Ожидает путь к каталогу, и дополнительное расширение для фильтрации / / Конечно, PHP должен иметь права на чтение каталога / / Укажите Вас и всех файлов и папок в этом каталоге / / ------------------------------------------------ ------------ / / Чтобы использовать эту функцию, чтобы получить все файлы и каталоги, в массив, пишут: / / $ Filestructure scan_directory_recursively = ('путь / к / директории'); / / Чтобы использовать эту функцию для сканирования каталогов и фильтрации результатов, пишут: / / $ FileSelection scan_directory_recursively = ('каталог', 'расширение'); scan_directory_recursively функции ($ директорию $ фильтр = false) { / / Если путь имеет косую черту в конце мы удаляем ее здесь если (подстрока ($ каталоге, -1) == '/') { Каталог $ = подстрока ($ каталоге, 0, -1); } / / Если путь неправильный, или не является каталогом ... если (file_exists ($ каталог) | |! is_dir ($ каталоге)) { / / ... мы возвращаемся ложные и выходим из функции return FALSE; / / ... еще, если путь доступен для чтения Elseif} (is_readable ($ каталоге)) { / / Мы открываем каталог $ Directory_list = opendir ($ каталогов); / / И поиск по элементам внутри а (FALSE! == ($ = файл READDIR ($ directory_list))) { / / Если filepointer не в текущем каталоге / / Или в родительскую директорию если ($ файл! = '.' && $ файл! = '..') { / / Мы строим новый путь для сканирования $ PATH = $ каталога '/' $ File.. / / Если путь доступен для чтения если (is_readable ($ путь)) { / / Мы разделили новый путь по каталогам $ Подкаталоги = explode ('/', $ PATH); / / Если новый путь каталогов если (is_dir ($ путь)) { / / Добавляем каталог деталей к списку файлов $ Directory_tree [] = массив ( «Путь» => $ путь, "Имя" => конец ($ подкаталоги), "Вид" => "каталог", / / Мы сканируем новый путь с помощью этой функции "Содержание" => scan_directory_recursively ($ PATH, $ фильтр)); / / Если новый путь файла Elseif} (is_file ($ PATH)) { / / Получаем расширение файла, принимая все, что после последней точки Расширение $ = конец (explode (, End ($ подкаталоги)) '.'); / / Если нет фильтра в сентябре или фильтр установлен и спички если ($ фильтр === FALSE | | $ фильтра == $ расширением) { / / Добавляем файл детали к списку файлов $ Directory_tree [] = массив ( «Путь» => $ путь, "Имя" => конец ($ подкаталоги), "Расширение '=> $ расширение 'Размер' => размер файла ($ путь), "Вид" => "файл"); } } } } } / / Закрываем каталог closedir ($ directory_list); / / Вернуть список файлов return $ directory_tree; / / Если путь не читается ... Else {} / / ... мы возвращаемся ложные return FALSE; } } / / ------------------------------------------------ ------------ >
Для Вашего удобства, но и мой собственный, я добавлю здесь версия без комментариев и готовы для скачивания:














