Blog

Web制作開発に役立ちそうなTipsや、インターネットに思うことなどを不定期で書いています。

重いphpがタイムアウトしてしまう場合のTips

一般的に公開されているWebでは滅多にない話ではありますが…。

処理にものすごーく、時間の掛かるphpスクリプトが途中でタイムアウトしてしまい、丸一日程無駄にしてしまったので備忘録的にメモしておきます。

【ブラウザにタイムアウトのメッセージが出る場合】

エラーメッセージの内容は

Fatal error: Maximum execution time of 30 seconds exceeded in……

この場合はphp.iniの中のmax_execution_timeの数字を大きな数字にするか、「0(無制限)」にしてしまえばOK。apacheを再起動しましょう。

php.iniが直接いじれない場合は.htaccessに

1
2
3
<br />
php_value ignore_user_abort On<br />
php_value max_execution_time 30000<br />

などと書く方法もあるようです。

また実行するphpスクリプト内で

1
2
<br />
set_time_limit(0);<br />

などと書く方法もあります。

でも今回小生がハマったのは、上記には非ず。エラーのメッセージも出ないまま、いつのまにかブラウザ(Firefox)の画面がホームに設定されているiGoogleになる、というもの。

【ブラウザがタイムアウトのメッセージを出さない場合(Firefox)】

アドレスバーに「about:config」と入力すると、警告メッセージを経て設定一覧が表示されます。

この中の「network.http.keep-alive.timeout」という項目の数字が300(秒)になっていたので30000に変更。今回の問題はこれで回避できました。

参考:時間のかかる処理でブラウザタイムアウトの対策(firefox) / Challenge4Life様

【Firefox以外のブラウザでは?】

InternetExolorerの場合はKeepAliveがデフォルトでは120秒とされているそうで、この変更にはレジストリをいじる必要があります。

参考:マイコミジャーナル:【コラム】Windows XPスマートチューニング 98 IEのKeepAliveタイムアウト値を設定する / 阿久津良和様

他のブラウザにも同様の事があったりなかったり?じっくり調べきってはいないのですが、汎用性を高くするには処理結果を都度画面に出力させる方法など、何かしらのデータをこまめに送り続けられる仕組みを組み込むのが良さそうです。

お気軽にお問い合わせください。
お見積りは無料です。