web-dev-qa-db-ja.com

phpタイムアウト-set_time_limit(0); -動作しない

PHPファイルの実行に30秒以上かかるファイルに問題があります。

検索後、コードの先頭にset_time_limit(0);を追加しましたが、30秒後に500 errorでファイルがタイムアウトします。

log: PHP Fatal error:  Maximum execution time of 30 seconds exceeded in /xxx/xx/xxx.php

safe-mode : off
24
user614963

Php.iniを確認してください

ini_set('max_execution_time', 300); //300 seconds = 5 minutes

ini_set('max_execution_time', 0); //0=NOLIMIT
27
user1601782

これは古いスレッドですが、この問題についてかなり助けになったので、これを link に投稿すると思いました。基本的に、サーバーの構成はphpの構成をオーバーライドできます。記事から:

たとえば、mod_fastcgiには、スクリプトのアイドル時間を制御する「-idle-timeout」というオプションがあります。そのため、スクリプトがその数秒間fastcgiハンドラーに何も出力しない場合、fastcgiはそれを終了します。セットアップは次のようになります。

Apache <-> mod_fastcgi <-> php processes

この記事には他の例と詳細な説明があります。これが他の誰かに役立つことを願っています。

6
Paul

通常、メインループ内でset_time_limit(30)を使用します(したがって、各ループの反復はスクリプト全体ではなく30秒に制限されます)。

複数のデータベース更新スクリプトでこれを実行しますが、これは完了するのに数分かかりますが、各反復に1秒未満です-30秒の制限を維持することは、スクリプトを作成するのに十分な愚かさがある場合、スクリプトが無限ループに陥らないことを意味します。

制限に対する30秒の選択は多少somewhat意的であることを認めなければなりません-私のスクリプトは代わりに2秒で実際に逃げることができますが、実際のアプリケーションを考えると30秒でより快適に感じます-もちろん、あなたが感じるどんな値でも使用できます適切です。

お役に立てれば!

4
SteJ
ini_set('max_execution_time', 300);

これを使って

2
Anooj P

これをチェックアウトしてください。これは PHP MANUAL からのものです。これが役立つ場合があります。

PHP_CLI SAPIを使用していて、「N秒の最大実行時間を超えました」というエラーが発生した場合(Nは整数値)、M秒ごとまたは反復ごとにset_time_limit(0)を呼び出してみてください。例えば:

<?php

require_once('db.php');

$stmt = $db->query($sql);

while ($row = $stmt->fetchRow()) {
    set_time_limit(0);
    // your code here
}

?>
1
Vins