2010-12-14 4 views
1
if (is_dir($dir)) { 
    if($handle = opendir($dir)) { 
     while($file = readdir($handle)) { 
     // Break the filename by period; if there's more than one piece, grab the last piece. 
     $parts = explode(".", $file); 
     if (is_array($parts) && count($parts) > 1) { 
      $ext = end($parts); 
      // If it's an image that we want, echo the code. 
      if ($ext == "png" OR $ext == "PNG" OR $ext == "jpg" OR $ext == "JPG" OR $ext == "jpeg" OR $ext == "JPEG" OR $ext == "gif" OR $ext == "GIF") 
      echo "<img src=\"$path/$file\" />"; 
     } 
    } 
    closedir($handle); 
    } 
... 

Ich benutze es in Wordpress, und die Seite lädt ziemlich langsam, aber es könnte auch von vielen Bildern sein. Ich wollte nur sicherstellen, dass ich nicht etwas mache, das aus Performancegründen verpönt ist.Ist das PHP opendir() sehr anstrengend auf dem Server?

Antwort

3

Nun könnte man es machen effizienter:

$extension = strtoupper(pathinfo($file, PATHINFO_EXTENSION)); 
if (in_array($extension(array('PNG', 'JPG', 'JPEG', 'GIF'))) { 
    echo '<img src="$path/$file" />'; 
} 

oder sogar glob() mit eher als opendir/readdir/closedir ... weil Sie es ein Muster von Dateierweiterungen geben kann.

Aber es gibt nichts von Natur aus langsam über sie

2

Holen Sie sich das Firefox "Quickjava" -Plugin.

Auf diese Weise können Sie Bilder deaktivieren (indem Sie auf das blaue I in der rechten Ecke klicken, damit es rot wird) und die Leistung Ihrer Webseite ohne Bilder testen.

3

Wir können nicht genau sagen, dass opendir langsam ist, da sie viele Konfigurationswerte, die Leistung beeinflussen kann.

, was Sie tun sollten, ist Benchmark der segement Code in Ihrer Anwendung wie folgt:

$start = microtime(true); 
//Your Code 
$end = (microtime(true) - $start); 

und genau sehen, wie lange es zu verarbeiten hatte genommen.

Einige andere Tipps:

$ext == "png" OR $ext == "PNG" ist überflüssig, Sie $ext = strtolower(end($parts)); und dann benutzen Sie einfach verwenden sollten:

$ext == "png" OR $ext == "jpg" OR $ext == "jpeg" OR $ext == "gif" 

besser nutzen können

if(in_array($ext,array("png","jpg","jpeg","gif"))){} 

auch anstelle OR verwenden Sie doch einfach Verwenden Sie einfach den Doppelpiped-Operator für die oder Bedingung: ||.

Verwandte Themen