Intereting Posts
php – регулярное выражение – PCRE не поддерживает \ L, \ l, \ N, \ P, Laravel Production issue – Обновление композитора с Laravel 4.1.x Как передать массив через $ _GET в php? Загрузите изображение из приложения iOS в php. Не совсем понятное – что мне не хватает? Надежно оценить простые математические данные Печать многомерного массива в таблице с использованием For loop Как установить более старую версию PHPUnit через PEAR? MongoDB: ObjectId to String Постоянный вход PHP и SQL Почему НЕ использовать PHP в качестве настольного языка программирования? mb_strlen () & strlen () не возвращают правильные значения из вызова Ajax в PHP Zend Framework – последний код для выполнения перед компоновкой Использование Apostrophe в значении MySQL ENUM, которое будет заполнять поле со списком HTML для поиска в базе данных Не удается подключиться к xdebug в PHPStorm Ошибка анализа: синтаксическая ошибка, неожиданный '{', expecting '(' help?

Рекурсивный путь к каталогу PHP

У меня есть эта функция, чтобы вернуть full directory tree :

 function getDirectory( $path = '.', $level = 0 ){ $ignore = array( 'cgi-bin', '.', '..' ); // Directories to ignore when listing output. Many hosts // will deny PHP access to the cgi-bin. $dh = @opendir( $path ); // Open the directory to the handle $dh while( false !== ( $file = readdir( $dh ) ) ){ // Loop through the directory if( !in_array( $file, $ignore ) ){ // Check that this file is not to be ignored $spaces = str_repeat( '&nbsp;', ( $level * 4 ) ); // Just to add spacing to the list, to better // show the directory tree. if( is_dir( "$path/$file" ) ){ // Its a directory, so we need to keep reading down... echo "<strong>$spaces $file</strong><br />"; getDirectory( "$path/$file", ($level+1) ); // Re-call this same function but on a new directory. // this is what makes function recursive. } else { echo "$spaces $file<br />"; // Just print out the filename } } } closedir( $dh ); // Close the directory handle 

}

но я хочу сделать поиск файла / папки и вернуть его путь, как я могу это сделать? у вас есть такая функция или вы можете дать мне несколько советов о том, как это сделать?

Попробуйте использовать RecursiveIteratorIterator в сочетании с RecursiveDirectoryIterator

 $path = realpath('/path/you/want/to/search/in'); $objects = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST); foreach($objects as $name => $object){ if($object->getFilename() === 'work.txt') { echo $object->getPathname(); } } 

Дополнительное чтение:

у вас есть такая функция или вы можете дать мне несколько советов о том, как это сделать?

Да.

Я действительно задал аналогичный вопрос сегодня утром, но понимаю. Проблема, с которой я столкнулась, заключается в том, что имена файлов. и .. возвращаются readdir (), и они вызывают проблемы при попытке использовать opendir (). Когда я отфильтровал их, моя рекурсия работала отлично. Возможно, вам захочется изменить формат, в котором он выводит каталоги, соответствующие запросу. Или изменить его для вывода всех файлов и каталогов. Найдите изображение для «go.jpg» и попробуйте его.

Я не могу найти свой пост, чтобы сообщить, что нашел решение.

 define ('HOME', $_SERVER['DOCUMENT_ROOT']); function searchalldirectories($directory, $seachterm, $maxrecursions, $maxopendir){ $dircontent= ''; $dirs= array(); if ($maxopendir > 0){ $maxopendir--; $handle= opendir( HOME.'/'.$directory); while (( $dirlisting= readdir($handle)) !== false){ $dn= ''; $fn= '&nbsp;&nbsp;File'; if ( is_dir( HOME.'/'.$directory.'/'.$dirlisting) && $maxrecursions>0 && strpos( $dirlisting, '.')!==0){ $dirs[ count($dirs)]= $directory.'/'.$dirlisting; $dn= '/'; $fn= 'Dir'; } if ( stripos($dirlisting, $seachterm) !== false){ $dircontent.= '<input type="image" src="go.jpg" name="cmd" value="home:/'.$directory.'/'.$dirlisting.'"> '.$fn.':// <b>'.$directory.'/'.$dirlisting.$dn.'/</b><br>'; } } closedir( $handle); for ( $i=0; $i<count( $dirs); $i++){ $dircontent.= searchalldirectories( $dirs[$i], $seachterm, ($maxrecursions-1), $maxopendir); } } return $dircontent; }