PHPで重い処理を実行すると以下のようなタイムアウトが起こることがある。
1 |
Fatal error: Maximum execution time of 30 seconds exceeded |
タイムアウトは以下のいずれかの方法で調整することができる。ただし、無限ループ回避のためにタイムアウトは無制限にしないこと。
php.ini
1 |
max_execution_time = 120 |
.htaccess
1 |
php_value max_execution_time 120 |
PHPファイル
1 2 3 4 5 |
<?php set_time_limit(120); //ファイルの先頭に ... ?> |
いくらPHPスクリプトのタイムアウトを伸ばしてみても、ウェブサーバーやブラウザにもタイムアウトがある。小手先のワザでタイムアウトを回避するよりも、重たい処理をいかに確実に実行させるか、処理内容を見直すべきだろうな (たとえば、処理を複数フェーズに分割するとか、サーバーに投げてバックグラウンドで実行させるとか)。タイムアウトが起こるかもしれない前提の設計が問題だと思うので。
参考サイト
PHP: set_time_limit – Manual
http://php.net/manual/ja/function.set-time-limit.php
重いphpがタイムアウトしてしまう場合のTips :: 横浜のフリーランスWeb制作者ブログ
http://sigt.jp/blog/web_dev/2010/10/05/evading_time-out_of_php/
[PHP] PHPスクリプトの実行時間を制御する(max_execution_time) – hogehoge foobar Blog Style5
http://d.hatena.ne.jp/mrgoofy33/20100922/1285168658
Fatal error: Maximum execution time of 30 seconds exceededの対処法 – [PHP + PHP] ぺんたん info
http://pentan.info/php/30timeout.html