2012-02-20 86 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