php scandir -> поиск файлов / каталогов

Я искал, прежде чем попросить, без везения ..

Я ищу простой скрипт для себя, и я могу искать файлы / папки. Нашел этот фрагмент кода в руководстве php (я думаю, мне это нужно), но это не работает для меня.

«Ищет простой способ поиска файла / каталога с использованием маски. Вот такая функция.

По умолчанию эта функция сохранит в памяти результат scandir (), чтобы избежать повторного сканирования для одного и того же каталога ».

<?php function sdir( $path='.', $mask='*', $nocache=0 ){ static $dir = array(); // cache result in memory if ( !isset($dir[$path]) || $nocache) { $dir[$path] = scandir($path); } foreach ($dir[$path] as $i=>$entry) { if ($entry!='.' && $entry!='..' && fnmatch($mask, $entry) ) { $sdir[] = $entry; } } return ($sdir); } ?> 

Спасибо за любую помощь,

Питер

Solutions Collecting From Web of "php scandir -> поиск файлов / каталогов"

 $a = new RegexIterator( new RecursiveIteratorIterator( new RecursiveDirectoryIterator('DIRECTORY HERE') ), '/REGEX HERE/', RegexIterator::MATCH ); foreach ($a as $v) { echo "$v\n"; //$v will be the filename } 

попробуйте использовать glob() http://us2.php.net/manual/en/function.glob.php

i вы просто хотите найти файл, вы можете использовать этот фрагмент:

  <?php $s = $get['s']; $e = ".htm"; $folders = array("data1", "data2", "data3"); $files = array(); // nothing needed here. anything in this array will be showed as a search result. for($i=0;$i<=count($folders)-1;$i++) { $glob = glob($folders[$i]); $files = array_merge($files, $glob[$i]); } echo "Search - $s<br><br>"; if(count($files) == 1) { echo "<li><a href='$files[0]'>".heir($files[0])."</a></li>"; } if(count($files) != 1) { for($i=0;$i<=count($files)-1;$i++) { echo "<li><a href='$files[$i]'>".heir($files[$i])."</a></li>"; } } if(count($files) == 0) { echo "Sorry, no hits."; } ?> 

Принятый ответ действительно приятный, но это заставило меня задуматься о итераторах Spl на скалах. Фабьен Potencier объясняет, как он создал классы Finder в symfony здесь:

http://fabien.potencier.org/article/43/find-your-files

Я также использую его поисковые классы, у них очень приятный прикованный интерфейс.

Пример:

 use Symfony\Component\Finder\Finder; $finder = new Finder(); $finder->files()->in(__DIR__); foreach ($finder as $file) { print $file->getRealpath()."\n"; } 

а также..

 $finder->files()->name('*.php'); // or $finder->files()->size('>= 1K')->size('<= 2K'); $finder->date('since yesterday'); 

Документация: http://symfony.com/doc/2.0/cookbook/tools/finder.html

Версия PHP5.2 + из рамы sf1.4: http://svn.symfony-project.com/branches/1.4/lib/util/sfFinder.class.php

Эта версия немного отличается и менее причудлива, но также делает работу. Вам нужно будет создать класс sfException, но это его единственная привязка к структуре symfony. Вы можете создать свой собственный класс sfException:

 class sfException extends Exception { } 

Документацию можно найти здесь: http://www.symfony-project.org/cookbook/1_2/en/finder