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

x3naxklr  于 2022-12-10  发布在  PHP
关注(0)|答案(5)|浏览(197)

下面是我目前的代码:

$files = glob("*.jpg");

这很好用。但是,我想列出其他的图像类型,比如png,gif等等。
我可以请有一些帮助来修改上面的代码,让它工作。我已经尝试了以下没有成功:

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

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

还有其他的变化...

bf1o4zei

bf1o4zei1#

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

eulz3vhy2#

2021年05月

这只是@Jeroen答案的扩展。

注意事项

'flag'很重要

由于您使用的是大括号,请记住GLOB_BRACE是必需的。

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

k4emjkb13#

我的两点意见:

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

有了这个,你就可以创建一个数组的所有扩展,你正在寻找不用担心不适当的情况下使用。希望它有帮助

dvtswwa3

dvtswwa34#

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

function whitelistToBrace($whitelist) {
  $str = "{";
  $whitelist = !empty($whitelist) ? $whitelist : ['*'];

  foreach($whitelist as $extension) {
    $str .= '*.' . strtolower($extension) . ',';
  };

  $str = substr($str, 0, -1) . '}';

  return $str;
}

用法

$whitelist = [
  'png',
  'jpg'
];

// glob('my/path/*.{*.png,*.jpg}', GLOB_BRACE);
$glob = glob('my/path/' . whitelistToBrace($whitelist), GLOB_BRACE);
print_r($glob);
hlswsv35

hlswsv355#

我发现了一个比使用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);

只是我的两分钱,希望它能帮助任何最终来到这里的人。

相关问题