2009-12-26 2 views
2

Есть ли «эффективный» способ в PHP для поиска файла через несколько каталогов?Как заставить функцию найти файл через несколько каталогов?

Допустим, я знаю, что этот файл может находиться в одном из путей поиска:

$ pathOne, $ pathTwo, $ pathThree. Но теперь представьте себе, что пользователь (разработчик, который использует фреймворк) может группировать свои вещи в подпапки. $ pathTwo содержит 20 подпапок, и каждая вложенная папка содержит еще 2 подпапки.

Как я мог искать по всем этим путям плюс вложенные папки для файла $? Я видел некоторые фреймворки, используя функцию file_exists() чрезмерно, чтобы сделать что-то подобное (но без поиска вложенных папок). Вероятно, мне нужен способ выяснить, какие папки есть, а затем наступить на них?

ответ

4

Вы можете использовать RecursiveDirectoryIterator из SPL библиотеки:

$dir_iterator = new RecursiveDirectoryIterator("/path"); 
$iterator = new RecursiveIteratorIterator($dir_iterator, 
        RecursiveIteratorIterator::SELF_FIRST); 

foreach ($iterator as $file) { 
    echo $file, "\n"; 
} 

Приведенный выше код выведет список всех файлов в каталоге вы указываете, включая все подкаталоги. Вы можете немного изменить цикл foreach() выполнить свою соответствующий файл логику, чтобы найти файл, который вы ищете, например:

$dir_iterator = new RecursiveDirectoryIterator("/path"); 
$iterator = new RecursiveIteratorIterator($dir_iterator, 
        RecursiveIteratorIterator::SELF_FIRST); 

foreach ($iterator as $splFile) { 
    if ($splFile->getBaseName() == $file) { 
     echo "Found it"; 
     //do stuff 
     break; 
    } 
} 

Экономит много работы того, чтобы выяснить все файлы и каталоги самостоятельно.

+1

Вы можете опустить SELF_FIRST, когда вам не нужны каталоги, и вы также можете сделать проверку имени файла в FilterIterator. – Gordon

+0

, пожалуйста, можете ли вы привести пример? Я не могу так работать. – openfrog

+0

@openfrog - второй блок кода является полным рабочим примером и отлично работает, если вы просто изменили «/ путь» в первой строке. Какая проблема у вас? – zombat

Смежные вопросы