Merhaba arkadaşlar bugün klasorden dosya isimlerini alma işlemlerinin bi kaç yöntemini teste tuttum ve sonucları burda paylaşmak istedim. klasör tarama işlemlerinde hiç düşünmeden kullandığım glob() fonksiyonu ne yazık ki beni hüsrana uğrattı.
ilk önce test ortamını tanıtmak istiyorum :
PHP Versiyonu : 5.3.2
Apache Versiyonu : 2.2
İşlemci : AMD Turion 64 X2 2.20 GHZ
Ram : 4 GB
işte denemeler;
0 1 2 3 4 5 6 | foreach(glob('*') as $dosya_ve_klasorler) { if( !is_dir($dosya_ve_klasorler) ) // ".." ve "." yı elemek için. { $dosyalar[] = $dosya_ve_klasorler; } } |
Dosya Adeti : 1096
İşlem Süresi : 0.838 sn
0 1 2 3 4 5 | foreach(glob('*', GLOB_NOSORT) as $dosya_ve_klasorler) { if( !is_dir($dosya_ve_klasorler) ) { $dosyalar[] = $dosya_ve_klasorler; } } |
Dosya Adeti : 1096
İşlem Süresi : 0.801 sn
0 1 2 3 4 | foreach(glob('*', GLOB_NOSORT) as $dosya_ve_klasorler) { $dosyalar[] = $dosya_ve_klasorler; } |
Dosya Adeti : 1096
İşlem Süresi : 0.147 sn
ilk büyük farkı burda gördük. is_dir kontrolu bizi 8 kat yavaşlatmış. devam ediyoruz.
0 1 2 3 4 5 6 7 | foreach (scandir('.') as $dosya_ve_klasorler) { if (is_dir($dosya_ve_klasorler)) { continue; } $dosyalar[] = $dosya_ve_klasorler; } |
Dosya Adeti : 1096
İşlem Süresi : 0.702 sn
glob fonksiyonunun is_dir ile beraber kullanılması ve scandir in is_dir ile beraber kullanılması arasında da pek fark göremedik. şimdi is_dir yerine preg_match kullanalm. (glob un yaptığı işi yapalım )
0 1 2 3 4 5 6 7 | foreach (scandir('.') as $dosya_ve_klasorler) { if (is_dir($dosya_ve_klasorler) || !preg_match('/test/i',$dosya_ve_klasorler) ) { continue; } $dosyalar[] = $dosya_ve_klasorler; } |
Dosya Adeti : 1088
İşlem Süresi : 0.701 sn
şimdi is_dir fonksiyonunua aradan cıkarıp farka bakalım.
0 1 2 3 4 5 6 7 | foreach (scandir('.') as $dosya_ve_klasorler) { if ( !preg_match('/test/i',$dosya_ve_klasorler) ) { continue; } $dosyalar[] = $dosya_ve_klasorler; } |
Dosya Adeti : 1088
İşlem Süresi : 0.013 sn
evet inanılmaz büyük bir fark. bu işlemden sonra for ile ilgili bir tes yapmak istiyordum ama burdaki küçük rakamlar benim coooook büyük bir dizi ile test etmem gerektiğini ortaya koyuyor son olarak readdir ile test edip bu testimizi de burda bitirelim
0 1 2 3 4 5 6 7 8 9 10 | $dir=opendir('.'); while ($dosya_ve_klasorler=readdir($dir)) { if ( !preg_match('/test/i',$dosya_ve_klasorler) ) { continue; } $dosyalar[] = $dosya_ve_klasorler; } closedir($dir); |
Dosya Adeti : 1088
İşlem Süresi : 0.011 sn
scandir ile arasında pek fark olmasa da galibimiz readdir. kendi glob gonksiyonumuzu yazıp kullanabiliriz. işte globdan daha hızlı glob fonskyionumuz(:
fonksiyonumuz :
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | function myGlob($dir,$pattern) { $dosyalar=array(); $dir=opendir($dir); while ($dosya_ve_klasorler=readdir($dir)) { if (!preg_match($pattern,$dosya_ve_klasorler) ) { continue; } $dosyalar[] = $dosya_ve_klasorler; } closedir($dir); return $dosyalar; } |
şimdi teste tutalım (:
0 | $dosyalar = myGlob('.','/test/i'); |
Dosya Adeti : 1088
İşlem Süresi : 0.012 sn
iyi çalışmalar (:







