Сканирование файлов в каталоге и подкаталоге и сохранение их пути в массиве с помощью php

Я не хочу проверять все файлы в каталоге и его подкаталоге. И получите их путь в массиве. Как путь к файлу в каталоге в массиве будет просто

путь -> text.txt

в то время как путь к файлу в подкаталоге будет

somedirectory / text.txt

Я могу сканировать один каталог, но он возвращает все файлы и подкаталоги без каких-либо различий.

if ($handle = opendir('fonts/')) { /* This is the correct way to loop over the directory. */ while (false !== ($entry = readdir($handle))) { echo "$entry<br/>"; } closedir($handle); } 

Каков наилучший способ получить все файлы в каталоге и подкаталоге с его путем?

Solutions Collecting From Web of "Сканирование файлов в каталоге и подкаталоге и сохранение их пути в массиве с помощью php"

Использование DirectoryIterator из SPL, вероятно, лучший способ сделать это:

 $it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('.')); foreach ($it as $file) echo $file."\n"; 

$file – это объект SPLFileInfo. Его метод __toString () даст вам имя файла, но есть и другие полезные методы!

Для получения дополнительной информации см .: http://www.php.net/manual/en/class.recursivedirectoryiterator.php

Используйте is_file() и is_dir() :

 function getDirContents($dir) { $handle = opendir($dir); if ( !$handle ) return array(); $contents = array(); while ( $entry = readdir($handle) ) { if ( $entry=='.' || $entry=='..' ) continue; $entry = $dir.DIRECTORY_SEPARATOR.$entry; if ( is_file($entry) ) { $contents[] = $entry; } else if ( is_dir($entry) ) { $contents = array_merge($contents, getDirContents($entry)); } } closedir($handle); return $contents; }