Как получить имена файлов? - PullRequest
5 голосов
/ 17 ноября 2010

Например, у нас есть папка /images/, в ней есть несколько файлов.

И сценарий /scripts/listing.php

Как мы можем получить имена всех файлов в папке /images/, в listing.php?

Спасибо.

Ответы [ 5 ]

8 голосов
/ 17 ноября 2010
<?php

if ($handle = opendir('/path/to/files')) {
    echo "Directory handle: $handle\n";
    echo "Files:\n";

    /* This is the correct way to loop over the directory. */
    while (false !== ($file = readdir($handle))) {
        echo "$file\n";
    }

    /* This is the WRONG way to loop over the directory. */
    while ($file = readdir($handle)) {
        echo "$file\n";
    }

    closedir($handle);
}
?>

См .: readdir ()

3 голосов
/ 17 ноября 2010

Даже проще, чем readdir (), используйте glob:

$files = glob('/path/to/files/*');

подробнее о glob

2 голосов
/ 17 ноября 2010

Вот метод, использующий класс SPL DirectoryIterator:

<?php

foreach (new DirectoryIterator('../images') as $fileInfo) 
{
    if($fileInfo->isDot()) continue;
    echo $fileInfo->getFilename() . "<br>\n";
}

?>
2 голосов
/ 17 ноября 2010

Использование scandir или dir делает эту проблему тривиальной.Чтобы получить все файлы в каталоге, кроме специальных файлов . и .. в массиве с индексами, начинающимися с 0, можно объединить scandir с array_diff и array_merge:

$files = array_merge(array_diff(scandir($dir), Array('.','..')));
// $files now contains the filenames of every file in the directory $dir
1 голос
/ 17 ноября 2010

только на посту Энрико, есть также некоторые проверки / модификации, которые вам нужно сделать.

class Directory
{
    private $path;
    public function __construct($path)
    {
        $path = $path;
    }

    public function getFiles($recursive = false,$subpath = false)
    {
        $files = array();
        $path = $subpath ? $subpath : $this->path;

        if(false != ($handle = opendir($path))
        {
            while (false !== ($file = readdir($handle)))
            {
                if($recursive && is_dir($file) && $file != '.' && $file != '..')
                {
                    array_merge($files,$this->getFiles(true,$file));
                }else
                {
                    $files[] = $path . $file;
                }
            }
        }
        return $files;
    }
}

И использование так:

<?php
$directory = new Directory("/");
$Files = $directory->getFiles(true);
?>

Это даст вам такой список:

/index.php
/includes/functions.php
/includes/.htaccess
//...

Да, это помогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...