我知道我可以做到这一点...
glob('/dir/somewhere/*.zip');
...获取所有以 结尾的文件.zip
,但是有没有办法返回所有不是ZIP 的文件?
或者我应该只遍历并过滤掉具有该扩展名的那些?
你总是可以尝试这样的事情:
$all = glob('/dir/somewhere/*.*');
$zip = glob('/dir/somewhere/*.zip');
$remaining = array_diff($all, $zip);
虽然,使用 Pascal 提到的其他方法之一可能更有效。
一种快速的方法是glob()
用于所有内容并用于preg_grep()
过滤掉您不想要的文件。
preg_grep('#\.zip$#', glob('/dir/somewhere/*'), PREG_GREP_INVERT)
这种模式将起作用:
glob('/dir/somewhere/*.{?,??,[!z][!i][!p]*}', GLOB_BRACE);
它会在 /dir/somewhere/ 中找到以点结尾的所有内容,然后是
?
)??
)[!z][!i][!p]*
)开头的内容我不认为 glob 可以做一个“非通配符”......
我看到至少两个其他解决方案:
opendir
/ readdir
/的组合closedir
DirectoryIterator
;也许你可以把它和一些结合起来FilterIterator
?$dir = "/path";
if (is_dir($dir)) {
if ($d = opendir($dir)) {
while (($file = readdir($d)) !== false) {
if ( substr($file, -3, 3) != "zip" ){
echo "filename: $file \n";
}
}
closedir($d);
}
}
注意:“。” 和“..”没有照顾。留给 OP 完成