2012-02-20 78 views
-1

我有以下这是相当缓慢。我如何加快速度?优化php文件阅读代码

(它扫描目录,使头部离开foldernames,并从内检索的PDF文件,并将它们添加到列表)

$directories= array_diff(scandir("../pdfArchive/subfolder", 0), array('..', '.')); 
    foreach ($directories as $v) { 
    echo "<h3>".$v."</h3>"; 
    $current = array_diff(scandir("../pdfArchive/subfolder/".$v, 0), array('..', '.')); 
    echo "<ul style=\"list-style-image: url(/images/pdf.gif); margin-left: 20px;\">"; 
    foreach ($current as $vone) { 
     echo "<li><a target=\"blank\" href=\"../pdfArchive/subfolder/".$vone."\">".str_replace(".pdf", "", $vone)."</a>"; 
     echo "</li><br>"; 
    } 
    echo "</ul>"; 
    } 
+0

你是如何确定它很慢? – 2012-02-20 13:07:54

+0

因为运行它需要一段时间。 – 2012-02-21 12:14:12

+0

哎,为什么减1? – 2012-02-21 12:14:21

回答

2

我不知道如何快速和array_diff()是数组时是非常大的,简单地添加一个单独的检查并确保''是不是更快。 '..'不是返回的名字?

除此之外,我看不出有什么不对。

你测试过什么来考虑目前的方法很慢?

3

不要使用array_diff()过滤掉当前和父目录,使用类似DirectoryIteratorglob()的东西,然后测试它是否是。或者通过.. if语句

水珠()有一个标志,它允许你只检索目录,为您的循环

简介您的代码,看看行/功能正在执行什么慢慢

0

这里我使用的代码片段是从php.net改编而来的。这是非常基本的,并通过给定的目录并列出其中包含的文件。

// The @ suppresses any errors, $dir is the directory path 
if (($handle = @opendir($dir)) != FALSE) { 
    // Loop over directory contents 
    while (($file = readdir($handle)) !== FALSE) { 
     // We don't want the current directory (.) or parent (..) 
     if ($file != "." && $file != "..") { 
      var_dump($file); 
      if (!is_dir($dir . $file)) { 
       // $file is really a file 
      } else { 
       // $file is a directory 
      } 
     } 
    } 
    closedir($handle); 
} else { 
    // Deal with it 
} 

您可以适应这种进一步利用is_dir识别正如我上面显示的文件夹递归超过子目录。

+0

感谢您的提示。尽管我正在寻找更多的直接答案 – 2012-02-21 12:15:50