2011-11-12 94 views
0

我有一個腳本,加載大量目錄列表,只是(在它的性質)需要永久加載。我現在在某些情況下會遇到腳本超時,並且很好奇,如果我可以使用像睡覺一樣的東西來防止腳本超時,或者只是讓情況變得更糟?PHP usleep,以防止腳本超時

+1

怎樣才能防止執行超時? – MatTheCat

+0

您是否生成任何輸出?有時apache會殺死一個活動的請求,如果它已經運行了很長時間而沒有發送任何輸出到客戶端。 –

+0

是否需要爲每個請求加載目錄列表?你可以運行一個週期性的任務來緩存文件列表嗎? – 2011-11-12 23:36:38

回答

1

PHP可以嘗試尋找一個文件/目錄,所以如果你已經在使用類似的東西,不適合長期存在:我沒有說過一句話

if ((is_dir($path) || file_exists($path)) && ($dh = opendir($path))) 
{ 
    while(($file = readdir($dh)) !== false) 
    { 
    .. file or dir is found, do stuff :) 
    } 

    closedir($dh); 
} 

,但如果您只需使用:

$dh = opendir($path); 

腳本超時可能需要幾分鐘時間,但它不會執行任何操作。

3

您不能使用set_time_limit()來設置超時限制嗎?

如果將其設置爲0,該腳本將永遠運行。

set_time_limit(0); 

Usleep()將在給定時間內停止執行PHP腳本。那段時間你的腳本不會列出任何目錄等。它只會凍結腳本,直到允許繼續。

0

您可以嘗試set_time_limit或者看看是否可以優化代碼:

  • 您的系統上執行ls -l > results.txt &使上市的背景,並將其複製到RESULTS.TXT文件啓動。
  • 使用子目錄
1

您在使用RecursiveDirectoryIterator生成目錄列表試圖減少你的目錄中的文件的數量?

我曾經使用遞歸函數生成目錄列表,當我不得不使用大量文件進入更深層次時,無意中導致腳本超時。使用RecursiveDirectoryIterator解決了我的許多問題。