PHPの実行時間の制限について書きました。
ajya.hatenablog.jp
max_execution_timeの値を長い時間をにして止まらないのを確認するのも方法ですが、1秒という極端に短い時間にして試してみました。
確かに1秒で終了したので、max_execution_timeの値で制限ができるようです。
どっちを使う?
max_execution_timeの説明には、「より詳細な情報については、 set_time_limit() 関数の説明を参照ください。」とあるので、set_time_limit()の説明を見てみました。PHP: set_time_limit - Manual
こちらを使えば、max_execution_timeの値を設定するのと同じように、実行時間の制限ができることが分かりました。
実際1秒と設定してためしたら、1秒で終了しました。
興味深かったのは、User Contributed Notesのこちらのコードです。
PHP: set_time_limit - Manual
ループの外側で1度だけset_time_limit(1)を呼び出した場合と、ループの外側で1度set_time_limit(1)を呼び出して、ループ内でもset_time_limit(1)を呼び出す場合とで、結果が違うことが書かれています。
1秒に制限されているので、ループが1秒以上かかれば強制終了してしまうでしょう。
それを回避するために、一定回数で再度設定しなおせば、タイムアウトのカウンタがゼロになって制限時間が再スタートするのというのが理解できます。
photo credit: jepoirrier Oops! Delhaize DigitalShelf is not responding! via photopin (license)