Glob () Olumsuzluk var mı?

5 Cevap php

Ben bunu biliyorum ...

glob('/dir/somewhere/*.zip');

... Tüm dosyalar .zip ile biten, ancak not fermuarlar tüm dosyaları dönmek için bir yol var olsun?

Veya sadece yineleme ve bu uzantıya sahip olanları filtre?

5 Cevap

Ben glob bir "değil-joker" yapabilirim sanmıyorum ...

Ben en az iki başka çözümler bkz:

Her zaman böyle bir şey deneyebilirsiniz:

$all = glob('/dir/somewhere/*.*');
$zip = glob('/dir/somewhere/*.zip');
$remaining = array_diff($all, $zip);

Pascal bahsedilen diğer yöntemlerden biri kullanılarak daha etkili olabilir, ancak.

Bu desen çalışır:

glob('/dir/somewhere/*.{?,??,[!z][!i][!p]*}', GLOB_BRACE);

in / dir / yere / ardından ya bir nokta biten her şeyi bulduğu

  • Bir karakter (?)
  • ya da iki karakter (??)
  • ya da bir şey ardışık harfi z ile başlayan değil, i, p ([!z][!i][!p]*)
$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);
    }
}

NB: "." ve ".." halledilir değil. Tamamlamak OP için sol