我一直在寻找答案,但我无法弄清楚为什么我的代码无效。我正试图从目录中获取所有图片文件(多个文件扩展名,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图像在那里)。
答案 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
}