如何在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的大小写扩展名