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 (:

Leave a Reply

(required)

(required)


4 × = twenty four

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

© 2012 Tufan Suffusion theme by Sayontan Sinha