Поиск файла в папке и подпапках на PHP
Хорошим примером использования рекурсии, может послужить поиск файла в папке и всем вложенным подпапкам.
Для поиска файла, достаточно перебрать все файлы во всех папках и сравнить название файла с искомым. И в случае совпадения добавить путь до файла в массив найденных фалов.
$folderName = ABSPATH; // в какой папке ищем
$fileName = "xml"; // что ищем
$found = search_file( $folderName, $fileName );
print_r( $found );
/* Вернет:
Array
(
[0] => /home/example.com/xmlrpc.php
[1] => /home/example.com/wp-includes/class-wp-xmlrpc-server.php
[2] => /home/example.com/wp-includes/wlwmanifest.xml
)
*/
/**
* Поиск файла по имени во всех папках и подпапках
* @param string $folderName - пусть до папки
* @param string $fileName - искомый файл
* @return array Массив найденных файлов.
*/
function search_file( $folderName, $fileName ){
$found = array();
$folderName = rtrim( $folderName, '/' );
$dir = opendir( $folderName ); // открываем текущую папку
// перебираем папку, пока есть файлы
while( ($file = readdir($dir)) !== false ){
$file_path = "$folderName/$file";
if( $file == '.' || $file == '..' ) continue;
// это файл проверяем имя
if( is_file($file_path) ){
// если имя файла искомое, то вернем путь до него
if( false !== strpos($file, $fileName) ) $found[] = $file_path;
}
// это папка, то рекурсивно вызываем search_file
elseif( is_dir($file_path) ){
$res = search_file( $file_path, $fileName );
$found = array_merge( $found, $res );
}
}
closedir($dir); // закрываем папку
return $found;
}—
Заметка встроена в: Полезные PHP код-сниппеты — для опытных