Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
列出多个文件扩展名的PHP文件_Php - Fatal编程技术网

列出多个文件扩展名的PHP文件

列出多个文件扩展名的PHP文件,php,Php,这是我目前的代码: $files = glob("*.jpg"); 这个很好用。但是,我想列出其他图像类型,如.png、gif等 我可以请一些帮助修改上述代码,使其工作。我尝试了以下方法,但没有成功: $files = glob("*.jpg","*.png","*.gif"); $files = glob("*.jpg,*.png,*.gif); 和其他变化 我的两分钱: $files = glob("*.{jpg,png,gif}", GLOB_BRACE); $availableI

这是我目前的代码:

$files = glob("*.jpg");
这个很好用。但是,我想列出其他图像类型,如.png、gif等

我可以请一些帮助修改上述代码,使其工作。我尝试了以下方法,但没有成功:

$files = glob("*.jpg","*.png","*.gif");

$files = glob("*.jpg,*.png,*.gif);
和其他变化

我的两分钱:

$files = glob("*.{jpg,png,gif}", GLOB_BRACE);
$availableImageFormats = [
"png",
"jpg",
"jpeg",
"gif"];
$searchDir = /*yourDir*/;
$imageExtensions = "{";
foreach ($availableImageFormats as $extension) {
    $extensionChars = str_split($extension);
    $rgxPartial = null;
    foreach ($extensionChars as $char) {
        $rgxPartial .= "[".strtoupper($char).strtolower($char)."]";
    }
    $rgxPartial .= ",";
    $imageExtensions .= $rgxPartial;
};
$imageExtensions .= "}";
glob($searchDir."/*.".$imageExtensions, GLOB_BRACE)
有了它,您可以创建一个包含所有您正在寻找的扩展的数组,而不必担心用例使用不当。
希望它能有所帮助

我只是在自己的项目中需要这个。我做了一个从数组到字符串的转换器

函数whitelistToBrace($whitelist){
$str=“{”;
$whitelist=!空($whitelist)?$whitelist:['*'];
foreach($白名单作为$扩展){
$str.='*..strtolower($extension)。',';
};
$str=substr($str,0,-1)。'}';
返回$str;
}
用法

$whitelist=[
‘巴布亚新几内亚’,
“jpg”
];
//glob('my/path/*.{*.png,*.jpg}',glob_括号);
$glob=glob('my/path/'.whitelistToBrace($whitelist),glob_括号);
印刷费($glob);

我发现了一个比使用GLOB_BRACE更简单的解决方案,它不区分大小写:

$files = array_filter(glob('path/*.*'), function ($filename) { return preg_match('/\.(jpe?g|png|gif)$/i', $filename); });
sort($files);
或者你可以这样做:

$files = preg_grep('/\.(jpe?g|png|gif)$/i', glob('path/*.*'));
sort($files);
只要我的两分钱,希望它能帮助到这里来的人。

05 2021 这只是@Jeroen答案的扩展

一些需要记住的事情 “旗帜”很重要 由于您使用的是花括号,请记住
GLOB_BRACE
required。如果没有该标志,您将获得一个空数组,如果

$files = glob("*.{jpg,png,gif}", GLOB_BRACE);
分类 这也将帮助您按照编写的方式对文件进行排序

$files = glob("*.{jpg,png,gif}", GLOB_BRACE);
xx.jpg
xx.jpg
xx.png
xx.gif
xx.gif

$files = glob("*.{gif,jpg,png}", GLOB_BRACE);
xx.gif
xx.gif
xx.jpg
xx.jpg
xx.png
+奖金 如果您必须列出所有文件,但没有文件夹,则可以使用此选项

$files = glob("*.{*}", GLOB_BRACE);

在逗号周围使用大括号时要小心:{jpg,png,gif}按预期工作,但是带有前导空格的{jpg,png,gif}只会按预期匹配前者,而不会匹配后者。请注意。这是区分大小写的,因此如果您的给定文件带有.JPG,它将无法工作。你可以使用
$files=glob(“*.{[jJ][pP][gG],[pP][nN][gG],[gG][iI][fF]}”,glob_括号)@隐藏用户名这不起作用。它似乎只获取每个组的最后一个[],因此在这种情况下,
*.[gG]、*.[gG]、*.[fF]
。可能大括号和[]不能一起工作。另一点需要注意:来自官方PHP文档:注意:GLOB_brace标志在一些非GNU系统上不可用,如Solaris。因此,根据您正在运行的服务器环境,您可能无法使用GLOB_BRACE@hidden-为什么事情会复杂化?保持简单:
“*。{jpg,png,gif,jpg,png,gif}”