何時間も続く可能性のあるループを実行する PHP スクリプトがあります。ただし、スクリプトが 60 秒をはるかに超えているにもかかわらず、約 50 分後に次のエラーが表示されます。
致命的なエラー: 275 行目の /path/script.php で最大実行時間が 60 秒を超えました
スクリプトが失敗するまでのメモリ使用量は、11359848 バイト - 10.8336 MB です。実際にスクリプトがこのようにつまずく原因はどのようなものでしょうか?
何時間も続く可能性のあるループを実行する PHP スクリプトがあります。ただし、スクリプトが 60 秒をはるかに超えているにもかかわらず、約 50 分後に次のエラーが表示されます。
致命的なエラー: 275 行目の /path/script.php で最大実行時間が 60 秒を超えました
スクリプトが失敗するまでのメモリ使用量は、11359848 バイト - 10.8336 MB です。実際にスクリプトがこのようにつまずく原因はどのようなものでしょうか?
最大実行時間はリアルタイムではなく、CPU 時間です。
したがって、たとえば、完了するまでに 10 時間かかる HTTP 要求を送信する場合 (つまり、I/O を待機する場合)、60 秒の制限内に簡単に収まることができます。しかし、ブルート フォース (つまり、スクリプトが実際に何かを実行している場所) を使用してハッシュを壊そうとすると、リアルタイムでほぼ 60 秒後に制限時間に達します。
問題の解決策は非常に簡単です。PHP がsafe_modeset_time_limit(0);
で実行されていない限り、時間制限を無効にします。