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

esa*_*wan 38 php file-extension directory-structure scandir image-file

有没有什么办法让仅与扩展的图像jpeg,png,gif等同时使用

$dir    = '/tmp';
$files1 = scandir($dir);
Run Code Online (Sandbox Code Playgroud)

Gor*_*don 85

您可以使用 glob

$images = glob('/tmp/*.{jpeg,gif,png}', GLOB_BRACE);
Run Code Online (Sandbox Code Playgroud)

如果您需要这是不区分大小写的,你可以使用一个DirectoryIterator结合一个RegexIterator 合格的结果scandir,以array_map和使用过滤任何多余的扩展回调.无论您使用strpos,fnmatch或者pathinfo获得延期是由你.

  • 那...不再使用`scandir()`了.但是否则是正确的.所以不应该是"不,用'glob`"? (5认同)
  • 现在让它不区分大小写.> :) (2认同)

小智 35

实际问题是使用scandir,答案最终以glob形式出现.blob相当重,两者都有很大差异.使用以下代码可以使用scandir完成相同的过滤:

$images = preg_grep('~\.(jpeg|jpg|png)$~', scandir($dir_f));
Run Code Online (Sandbox Code Playgroud)

我希望这会对某人有所帮助.

  • 这很好用,但 RegEx 应该在结尾波形符后有一个“i”以使其不区分大小写,以免过滤掉具有大写扩展名(如 .PNG 或 .JPG)的图像/图形文件名 (6认同)

Jos*_*iah 14

我会遍历文件并查看其扩展名:

$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;
}
closedir($dh);
Run Code Online (Sandbox Code Playgroud)


Mad*_*ota 10

这是获取图像的简单方法.适用于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);
Run Code Online (Sandbox Code Playgroud)

我希望如果您想要不区分大小写和仅图像扩展,这将非常有用.


Bor*_*lid 6

您可以在之后搜索生成的数组,并丢弃与您的条件不匹配的文件.

scandir 没有您寻求的功能.