2011-11-12 11 views
0

私は大量のディレクトリリストを読み込むスクリプトを持っており、(その性質上)読み込みに時間がかかります。私はスクリプトのタイムアウトを経験するケースがいくつかあり、スクリプトがタイムアウトしないように私のようなものを使うことができるのか、状況を悪化させるだけなのか不思議でした。PHPのスクリプトタイムアウトを防ぐためのusleep

+1

私たちはどのようにして実行タイムアウトを防止できますか? – MatTheCat

+0

出力を生成していますか?場合によっては、クライアントに出力を送信せずに長時間実行していた場合、apacheはアクティブなリクエストを終了させることがあります。 –

+0

リクエストごとにディレクトリ一覧を読み込む必要がありますか?代わりにファイルリストをキャッシュする定期的なタスクを実行できますか? –

答えて

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を試すか、あなたのコードを最適化することができるかどうかを確認することができます

  • リストが背景とRESULTS.TXTファイルにコピーし、それをで起動するようにシステムにls -l > results.txt &を実行します。
  • サブディレクトリ
1

を使用して、ディレクトリ内のファイルの量を減らし、あなたはディレクトリのリストを生成するためのRecursiveDirectoryIteratorを使用してみましたか?

私は再帰関数を使用してディレクトリリストを生成していました。これは、大量のファイルをより深いレベルで処理しなければならないときに誤ってスクリプトのタイムアウトを引き起こします。 RecursiveDirectoryIteratorを使用して私の多くの問題を解決しました。

関連する問題