0

私は大規模なディレクトリリストをロードするスクリプトを持っていますが、(その性質上)ロードするのに永遠に時間がかかります。現在、スクリプトのタイムアウトが発生している場合があります。usleepなどを使用してスクリプトがタイムアウトしないようにすることができるのか、それとも状況を悪化させるだけなのか、興味がありました。

4

4 に答える 4

3

set_time_limit()でタイムアウト制限を設定することはできませんか?

0に設定すると、スクリプトは永久に実行されます。

set_time_limit(0);

Usleep()は、指定された時間内にPHPスクリプトの実行を停止します。その間、スクリプトはディレクトリなどをリストしません。続行が許可されるまで、スクリプトをフリーズします。

于 2011-11-12T22:57:42.047 に答える
1

ディレクトリ リストの生成にRecursiveDirectoryIteratorを使用してみましたか?

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

于 2011-11-12T23:41:44.293 に答える
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);

スクリプトがタイムアウトするまでに数分かかることがありますが、何もしません。

于 2011-11-12T23:03:23.477 に答える
0

set_time_limitコードを最適化できるかどうか試してみることができます。

  • システムで実行ls -l > results.txt &して、リストがバックグラウンドで起動し、results.txtファイルにコピーされるようにします。
  • サブディレクトリを使用して、ディレクトリ内のファイルの量を減らします
于 2011-11-12T23:18:28.090 に答える