Рецепт №83. Из книги «128 рецептов php»
Перейти к оглавлению
Еще одним хорошим примером использования рекурсии, может послужить поиск файла по папке и всем вложенным подпапкам. Для поиска файла, достаточно перебрать все файлы во всех папках и сравнить название файла с искомым. И в случае совпадения вернуть путь до найденного файла.
Пример:
// пример использования $folderName = "./files"; // в какой папке ищем $fileName = "test.txt"; // что ищем $result = search_file($folderName, $fileName); if($result){ echo $result; }else{ echo "Нет такого файла"; } /** * Поиск файла по имени во всех папках и подпапках * * @param string $folderName - пусть до папки * @param string $fileName - искомый файл */ function search_file($folderName, $fileName){ // открываем текущую папку $dir = opendir($folderName); // перебираем папку // перебираем пока есть файлы while (($file = readdir($dir)) !== false){ if($file != "." && $file != ".."){ // если файл проверяем имя if(is_file($folderName . "/" . $file)){ // если имя файла искомое, // то вернем путь до него if($file == $fileName) return $folderName."/".$file; } // если папка, то рекурсивно // вызываем search_file if(is_dir($folderName . "/" . $file)){ return search_file($folderName . "/" . $file, $fileName); } } } // закрываем папку closedir($dir); }