У меня есть эта функция, чтобы вернуть 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( ' ', ( $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= ' 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; }