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

如何在PHP中使用scandir仅获取图像?,php,directory-structure,file-extension,scandir,image-file,Php,Directory Structure,File Extension,Scandir,Image File,使用时,是否有任何方法仅获取扩展名为jpeg、png、gif等的图像 $dir = '/tmp'; $files1 = scandir($dir); 您可以随后搜索生成的数组并丢弃与条件不匹配的文件 scandir没有您想要的功能。您可以在搜索结果数组后丢弃与您的条件不匹配的文件 scandir没有您想要的功能。您可以使用 如果需要区分大小写,可以将directoryinterator与RegexIterator结合使用,或者将scandir的结果传递到array\u map并使用回调来

使用时,是否有任何方法仅获取扩展名为
jpeg
png
gif
等的图像

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

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


scandir
没有您想要的功能。

您可以在搜索结果数组后丢弃与您的条件不匹配的文件

scandir
没有您想要的功能。

您可以使用

如果需要区分大小写,可以将
directoryinterator
RegexIterator
结合使用,或者将
scandir
的结果传递到
array\u map
并使用回调来过滤任何不需要的扩展。您可以使用
strpos
fnmatch
pathinfo
来获取扩展名。

您可以使用


如果需要区分大小写,可以将
directoryinterator
RegexIterator
结合使用,或者将
scandir
的结果传递到
array\u map
并使用回调来过滤任何不需要的扩展。您是否使用
strpos
fnmatch
pathinfo
获取扩展名取决于您。

我将循环浏览这些文件并查看它们的扩展名:

$dir='/tmp';
$dh=opendir($dir);
while(false!=($fileName=readdir($dh))){
$ext=substr($fileName,strrpos($fileName,'.')+1);
if(在数组中($ext,数组(“jpg”、“jpeg”、“png”、“gif”))
$files1[]=$fileName;
}
closedir($dh);

我会循环浏览这些文件并查看它们的扩展名:

$dir='/tmp';
$dh=opendir($dir);
while(false!=($fileName=readdir($dh))){
$ext=substr($fileName,strrpos($fileName,'.')+1);
if(在数组中($ext,数组(“jpg”、“jpeg”、“png”、“gif”))
$files1[]=$fileName;
}
closedir($dh);

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

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

这里有一个只获取图像的简单方法。适用于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);

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

实际问题是使用scandir,答案最终会出现在glob中。在两种情况下都有巨大的差异,其中水滴相当重。可以使用以下代码对scandir执行相同的过滤:

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

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

实际的问题是使用scandir,答案最终会出现在glob中。在两种情况下都有巨大的差异,其中水滴相当重。可以使用以下代码对scandir执行相同的过滤:

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

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

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

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

scandir()
将返回
以及文件,因此,如果您只需要文件名,或者您想对实际文件路径执行其他操作,则上述代码会更干净

如果您想扫描目录并仅返回文件名,则可以使用以下方法:

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

scandir()
将返回
以及文件,因此,如果您只需要文件名,或者希望对实际文件路径执行其他操作,则上述代码会更干净。

。。。不再使用
scandir()
。但在其他方面是正确的。那么这不应该是“不,使用
glob
”?现在让它不区分大小写。>:)@撒拉,你这个邪恶的人!!:p但它不支持unicode字符文件名:(这…不再使用
scandir()
。但在其他方面是正确的。所以,这不应该是“不,使用
glob
”?现在使其不区分大小写。>:)@salathe邪恶的你!!:p但它不支持unicode字符文件名:(这很好,但是RegEx应该在结尾的tilde后面有一个'i',使其不区分大小写,这样就不会过滤掉带有大写扩展名的图像/图形文件名,如.PNG或.jpg。这很好,但是RegEx应该在结尾的tilde后面有一个'i',使其不区分大小写,这样就不会过滤掉带有uppe的图像/图形文件名。)类似.PNG或.JPG的大小写扩展名