PHP:使用GLOB获取多种文件类型

时间:2014-08-04 17:25:24

标签: php image random glob

我一直在寻找答案,但我无法弄清楚为什么我的代码无效。我正试图从目录中获取所有图片文件(多个文件扩展名,jpg,gif,png等)并将其放入数组中。问题在于我的GLOB代码,它只能抓取1个jpg图像(每次都是相同的),尽管其他人在那里。

 $imagesDir = 'C:\inetpub\wwwroot\TV\images';
 $images = glob($imagesDir . '/*.{jpg,png,gif,jgeg,svg,bmp}', GLOB_BRACE);
 $images2 = glob($imagesDir . '/*.*', GLOB_BRACE); 
 $images3 = glob("C:\inetpub\wwwroot\TV\images.{*jpg,*png,*gif,*bmp,*jpeg,*svg}",      
 GLOB_BRACE);

我试图将路径放入glob命令本身,但我无法使用语法。

$ images只捕获一个特定的jpg文件(尽管所有7个都是jpg)但是在数组中。 $ images2成功抓取阵列中的所有图像(但包括所有类型的文件路径)。 $ images3直不起作用。

我唯一的猜测是$ images只抓取1个文件然后调用它退出。我想知道为什么它没有抓住目录中的所有图片。

编辑:将它放在foreach循环中仍然不起作用:

foreach (glob($imagesDir . '/*.{jpg,gif,jgeg,svg,bmp}', GLOB_BRACE) as $filename) {
    array_push($images, $filename);
}

返回相同的图像(它总是'IMG_8646,尽管有其他jpg图像在那里)。

2 个答案:

答案 0 :(得分:3)

最好使用迭代器DirectoryInterator,这是一个代码片段: -

$valid_ext = array("jpg", "gif", "jpeg", "svg", "bmp"); // valid extensions

foreach (new DirectoryIterator($imagesDir) as $fileInfo) { // interator
    if (in_array($fileInfo->getExtension(), $valid_ext) ) { // in $valid_ext
        echo $fileInfo->getFilename() . "<br>\n"; // do something here
    }
}

答案 1 :(得分:1)

您应该使用foreach(){}来遍历glob函数。如

 foreach (glob('/path/to/images/*.jpg') as $filename) {
    //echo file name
 }