列出目录中的所有文件

时间:2011-01-21 13:53:45

标签: php symfony1

使用symfony我正在尝试创建一个列出Web文件夹中所有图像的页面

我创建了以下操作:

$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 个答案:

答案 0 :(得分:6)

在while循环中调用$d->close(); 不是更好吗?

我认为这就是原因 - 在找到第一张图片后,资源将被关闭,下一张read()将失败。

答案 1 :(得分: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,Fabien Potencier在此发表了一篇博文:http://fabien.potencier.org/article/43/find-your-files

答案 2 :(得分:1)

您可以使用glob,这很简单:

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