Список всех файлов в каталоге - PullRequest
1 голос
/ 21 января 2011

используя symfony Я пытаюсь создать страницу со списком всех изображений в веб-папке.

Я создал следующее действие:

$dir = 'images/blog';
$fulldir = "{$_SERVER['DOCUMENT_ROOT']}/$dir";
$d = @dir($fulldir) or die('Failed opening directory for reading');

while(false !== ($entry = @$d->read()))
{
    $this->imagesBlog[] = array(
        "file" => "/$dir/$entry",
        "size" => getimagesize("$fulldir/$entry"));

    $d->close();
}

И следующий шаблон:

foreach($imagesBlog as $img)
    echo '<img class="photo" src="'.$img['file'].'" ' . $img['size'][3].'>'."\n";

Это похоже на работу, но возвращает только одно изображение из папки, содержащей несколько файлов.

print_r($imagesBlog):

sfOutputEscaperArrayDecorator Object
(
    [count:sfOutputEscaperArrayDecorator:private] => 1
    [value:protected] => Array
        (
            [0] => Array
                (
                    [file] => /images/blog/FM-stupidest.png
                    [size] => Array
                        (
                            [0] => 300
                            [1] => 252
                            [2] => 3
                            [3] => width="300" height="252"
                            [bits] => 8
                            [mime] => image/png
                        )

                )

        )

    [escapingMethod:protected] => esc_specialchars
)

Помощь!Я схожу с ума здесь.

Ответы [ 3 ]

6 голосов
/ 21 января 2011

Не лучше ли назвать $d->close(); вне цикла while?

Я думаю, что это причина - после нахождения первого изображения ресурс будет закрыт, а следующее чтение () завершится неудачей.

2 голосов
/ 27 марта 2012

Для всех, кто наткнулся на этот пост во время поиска окончательного ответа, есть класс Symfony, который позаботится об этом за вас: sfFinder (для Symfony 1.4).

http://www.symfony -project.org / апи / 1_4 / sfFinder

$finder = new sfFinder;

foreach($finder->in(sfConfig::get('sf_web_dir') . '/images/projects/') AS $file) {

    if(is_file($file)) {
        echo $file;
    }
}

Для Symfony 2 есть пост в блоге Fabien Potencier здесь: http://fabien.potencier.org/article/43/find-your-files

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

Вы можете использовать glob , это достаточно просто:

$path = 'images/blog/';
$files = glob($path.'*.{jpg,gif,png}', GLOB_BRACE);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...