Список содержимого каталога (php) - PullRequest
6 голосов
/ 16 января 2011


У меня есть папка. Я хочу поместить каждый файл в этой папке в массив, а затем хочу отобразить их все в цикле foreach.
Какой лучший способ сделать это?
Спасибо!

Ответы [ 5 ]

15 голосов
/ 16 января 2011

Scandir - это то, что вы ищете http://php.net/manual/en/function.scandir.php

<?php
$dir    = '/tmp';
$files1 = scandir($dir);

print_r($files1);
?>

Или используйте комбинацию opendir и readdir http://php.net/manual/en/function.readdir.php

1 голос
/ 02 июня 2013

Это работает и для файлов и папок в подпапках.Возврат списка папок и списка файлов с указанием их пути.



    $dir = __DIR__; //work only for this current dir
    function listFolderContent($dir,$path=''){
        $r = array();
        $list = scandir($dir);
        foreach ($list as $item) {
            if($item!='.' && $item!='..'){
                if(is_file($path.$item)){
                    $r['files'][] = $path.$item;
                }elseif(is_dir($path.$item)){
                    $r['folders'][] = $path.$item;
                    $sub = listFolderContent($path.$item,$path.$item.'/');
                    if(isset($sub['files']) && count($sub['files'])>0)
                        $r['files'] = isset ($r['files'])?array_merge ($r['files'], $sub['files']):$sub['files'];
                    if(isset($sub['folders']) && count($sub['folders'])>0)
                        $r['folders'] = array_merge ($r['folders'], $sub['folders']);
                }
            }
        }
        return $r;
    }
    $list = listFolderContent($dir);
    var_dump($list['files']);
    var_dump($list['folders']);
1 голос
/ 17 января 2011

Альтернатива:

define('PATH', 'files/');

$filesArray = array();
$filesArray = glob(PATH . '*', GLOB_ONLYDIR);

Этот метод позволяет вам указать / отфильтровать по типу файла. Например.,

define('PATH', 'files/');
define('FILE_TYPE', '.jpg');

$filesArray = array();
$filesArray = glob(PATH . '*' . FILE_TYPE, GLOB_ONLYDIR);

Вы также можете получить полное имя пути к файлу, удалив параметр 'GLOB_ONLYDIR'

1 голос
/ 16 января 2011

Не намного легче, чем этот

http://ca3.php.net/manual/en/function.scandir.php

Не забудьте отфильтровать скрытые и родительские каталоги (они начинаются с точки) в linux.

0 голосов
/ 16 января 2011

Редактировать: ответ dwich лучше.Я оставлю это только для информации.

readdir .

<?php

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

    while (false !== ($file = readdir($handle))) {
        echo "$file\n";
    }

    closedir($handle);
}
?>

Надеюсь, это поможет.
—Альберто

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