优化php文件读取代码

时间:2012-02-20 13:05:52

标签: php optimization

我有以下相当慢的内容。我怎样才能加快速度?

(它扫描目录并从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>";
  }

3 个答案:

答案 0 :(得分:3)

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

glob()有一个标志,允许您只检索循环的目录

对代码进行概要分析,以确切了解哪些行/函数正在缓慢执行

答案 1 :(得分:2)

我不确定当数组非常大时array_diff()的速度有多快,单独添加一个单独的检查并确保'。'更快。和'..'不是返回的名字?

除此之外,我看不出有任何错误。

你考虑当前的方法考虑了什么?

答案 2 :(得分: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识别上面显示的文件夹来进一步调整这些内容以对子目录进行递归。