2011-01-21 3 views
1

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

Помощь! Я теряю рассудок здесь.

+1

Это, по крайней мере, один из четырех экземпляров. Найди свой ответ в http://stackoverflow.com/search?q=list+all+files+in+a+directory+php – Gordon

+0

Возможный дубликат [PHP список всех файлов в каталоге] (http://stackoverflow.com/questions/3826963/php-list-all-files-in-directory) – Gordon

+0

И поскольку вы используете Symfony, вас также может заинтересовать http://fabien.potencier.org/article/43/find-your-files – Gordon

ответ

6

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

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

+2

lol, я идиот. Я думаю, что пришло время перерыва от кодирования. :) – Manu

1

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

$path = 'images/blog/'; 
$files = glob($path.'*.{jpg,gif,png}', GLOB_BRACE); 
2

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

http://www.symfony-project.org/api/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, есть блог по Фабьен Potencier здесь: http://fabien.potencier.org/article/43/find-your-files

Смежные вопросы