Сканирование файлов в каталоге и подкаталоге и сохранение их пути в массиве с использованием php - PullRequest
2 голосов
/ 15 января 2012

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

путь -> 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);
    }

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

Ответы [ 2 ]

7 голосов
/ 15 января 2012

Использование 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

3 голосов
/ 15 января 2012

Использование 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...