如何在PHP中使用scandir获取图像?
有没有什么办法只使用扩展名的jpeg
, png
, gif
等图像时使用
$dir = '/tmp'; $files1 = scandir($dir);
你可以使用glob
$images = glob('/tmp/*.{jpeg,gif,png}', GLOB_BRACE);
如果您需要不区分大小写,可以将DirectoryIterator
与RegexIterator
结合使用, 或者将scandir
的结果传递给array_map
并使用callback来过滤不需要的扩展。 无论你使用strpos
, fnmatch
还是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。