如何在PHP中使用scandir获取图像?

有没有什么办法只使用扩展名的jpegpnggif等图像时使用

 $dir = '/tmp'; $files1 = scandir($dir); 

你可以使用glob

 $images = glob('/tmp/*.{jpeg,gif,png}', GLOB_BRACE); 

如果您需要不区分大小写,可以将DirectoryIteratorRegexIterator结合使用, 或者scandir的结果传递给array_map并使用callback来过滤不需要的扩展。 无论你使用strposfnmatch还是pathinfo来获取扩展名都取决于你。

真正的问题是使用scandir,答案以glob结尾。 在两个相当重的地方有一个巨大的差异。 使用以下代码可以使用scandir完成相同的过滤:

 $images = preg_grep('~\.(jpeg|jpg|png)$~', scandir($dir_f)); 

我希望这会帮助别人。

我将遍历这些文件并查看它们的扩展名:

 $dir = '/tmp'; $dh = opendir($dir); while (false !== ($fileName = readdir($dh))) { $ext = substr($fileName, strrpos($fileName, '.') + 1); if(in_array($ext, array("jpg","jpeg","png","gif"))) $files1[] = $fileName; } 

这是一个简单的方法来获取图像。 适用于PHP> = 5.2版本。 扩展名的集合是小写的,所以将循环中的文件扩展名设置为小写字母会使其不区分大小写。

 // image extensions $extensions = array('jpg', 'jpeg', 'png', 'gif', 'bmp'); // init result $result = array(); // directory to scan $directory = new DirectoryIterator('/dir/to/scan/'); // iterate foreach ($directory as $fileinfo) { // must be a file if ($fileinfo->isFile()) { // file extension $extension = strtolower(pathinfo($fileinfo->getFilename(), PATHINFO_EXTENSION)); // check if extension match if (in_array($extension, $extensions)) { // add to result $result[] = $fileinfo->getFilename(); } } } // print result print_r($result); 

我希望这是有用的,如果你想不区分大小写和图像只有扩展名。

之后您可以search结果数组,并放弃不符合条件的文件。

scandir没有你想要的function。