这个PHP opendir()在服务器上非常费力吗?

时间:2010-12-14 08:34:22

标签: php performance opendir

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);
  }
...

我在Wordpress中使用它,页面加载速度非常慢,但也可能是因为它上面有很多图像。我只是想确保我没有做出因性能原因而不满意的事情。

3 个答案:

答案 0 :(得分:3)

嗯,你可以提高效率:

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

甚至使用glob()而不是opendir / readdir / closedir ...因为你可以给它一个文件扩展名的模式。

但是没有什么本质上缓慢的

答案 1 :(得分:3)

我们无法确切地说opendir很慢,因为它们有许多可能影响性能的配置值。

你应该做的是对应用程序中的代码进行基准测试,如下所示:

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

并确切了解处理过程需要多长时间。

其他一些提示:

$ext == "png" OR $ext == "PNG"是多余的,您应该使用$ext = strtolower(end($parts));,然后使用:

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

更好,你可以使用

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

也可以不使用OR而只使用双管道运算符作为条件:||

答案 2 :(得分:2)

获取firefox“quickjava”插件。

通过这种方式,您可以禁用图像(通过单击右上角的蓝色I使其变为红色)并测试网页的性能,而不显示任何图像。