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

问题描述 投票:0回答:7

有什么方法可以在使用时仅获取带有扩展名

jpeg
png
gif
等的图像

$dir    = '/tmp';
$files1 = scandir($dir);
php directory-structure file-extension scandir image-file
7个回答
98
投票

您可以使用

glob

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

如果您需要不区分大小写,则可以将

DirectoryIterator
RegexIterator
结合使用,将
scandir
的结果传递给
array_map
并使用回调来过滤任何不需要的扩展。您是否使用
strpos
fnmatch
pathinfo
来获取扩展取决于您。


71
投票

实际问题是使用 scandir ,答案最终以 glob 形式出现。两者之间存在巨大差异,其中斑点相当重。可以使用 scandir 使用以下代码完成相同的过滤:

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

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


14
投票

这是一种仅获取图像的简单方法。适用于 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);

如果您想要不区分大小写且仅图像扩展,我希望这很有用。


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);

9
投票

您可以随后搜索结果数组并丢弃不符合您条件的文件。

scandir
没有您想要的功能。


3
投票

如果您想扫描目录并返回文件名,则只能使用此:

$fileNames = array_map(
    function($filePath) {
        return basename($filePath);
    },
    glob('./includes/*.{php}', GLOB_BRACE)
);

scandir()
将返回
.
..
以及文件,因此如果您只需要文件名或者您想使用实际文件路径做其他事情,上面的代码会更干净


1
投票

我编写了代码,重用并组合了上述解决方案的部分内容,以便更容易理解和使用:

<?php
//put the absolute or relative path to your target directory
$images = scandir("./images");
$output = array();
$filter = '/(.jpg|.png|.jpeg|.gif|.bmp)/';
foreach($images as $image){
  if(preg_match($filter, strtolower($image))){
    $output[] = $image;
  }
}
var_dump($output);
© www.soinside.com 2019 - 2024. All rights reserved.