在典型的文件匹配代码中:
while (false !== ($file = readdir($handle))) {
if ($file !== "." && $file !== ".." && fnmatch($mask, $file)) {
$dirList[] = $file;
}
}
Run Code Online (Sandbox Code Playgroud)
我试图使用这样的多文件扩展名模式:
$mask = "*.{jpg,png,gif}";
Run Code Online (Sandbox Code Playgroud)
但它不起作用。没有文件匹配。这很奇怪,因为相同的模式在终端中工作得很好。它也可以与 glob() 完美配合,返回我想要的文件。我知道其余代码没有任何问题,因为使用“*.jpg”作为掩码也适用于 fnmatch。难道 fnmatch 不应该支持 shell 中可用的相同模式吗?
不支持。
AFAIK*.{ext,alt}是 shell globs 的 ksh 和 bash 扩展。Andfnmatch()是一个系统功能,但功能因 Unix 变体而异(BSD 有,Linux/glibc 似乎没有)。存在一个FNM_EXTMATCH常数,我相信它可以{alt}起作用。但是 PHP 不支持它/传递它。
但是您可以使用支持所述匹配glob()的GLOB_BRACE选项.{jpeg,png,gif}。这样你就可以为自己节省一个 readdir()。