私はこれができることを知っています...
glob('/dir/somewhere/*.zip');
... で終わるすべてのファイルを取得するには、しかし、 ZIPではない.zip
すべてのファイルを返す方法はありますか?
それとも、その拡張子を持つものを繰り返し処理して除外する必要がありますか?
いつでも次のようなことを試すことができます。
$all = glob('/dir/somewhere/*.*');
$zip = glob('/dir/somewhere/*.zip');
$remaining = array_diff($all, $zip);
ただし、パスカルが言及した他の方法のいずれかを使用する方が効率的かもしれません。
簡単な方法は、glob()
for everything を使用preg_grep()
して、不要なファイルを除外することです。
preg_grep('#\.zip$#', glob('/dir/somewhere/*'), PREG_GREP_INVERT)
PHP でのファイル マッチングの Glob パターンも参照してください。
このパターンは機能します:
glob('/dir/somewhere/*.{?,??,[!z][!i][!p]*}', GLOB_BRACE);
/dir/somewhere/ 内のすべてを検索し、ドットで終わり、その後にいずれかが続きます
?
)??
)[!z][!i][!p]*
)で始まらないもの私は glob が「非ワイルドカード」を実行できるとは思わない...
他に少なくとも 2 つの解決策があります。
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が完了するまで放置