検索
カレンダー
2007年1月
« 12月   2月 »
 123456
78910111213
14151617181920
21222324252627
28293031  
ブログメニュー
Amazon検索
キーワード:

PHPの処理を中断させない方法

2007年1月17日

PHPで標準で以下のような機能が実装されています。

  • ブラウザとの接続が切れた場合(ブラウザの「中止」ボタンが押された場合や閉じられた場合)に処理を中断する
  • ブラウザからのリクエストがあってから、30秒以上経過しても処理が終わらなければ中断する

これらの機能は、スクリプトにバグがある場合などで処理が終了できなくなった際の予防です。ですが仕事でPHPを使っている場合、どうしても処理を中断させたくない場合があります。

この場合、上記の2つの機能を無効にする必要があります。ただしタイムアウト時間を無限にした場合、本当に無限ループに入っている場合に終わらなくなってしまいますので、タイムアウト時間を十分に長いものに指定することをお勧めします。設定方法は以下のようになります。

【php.iniに設定する場合】
ignore_user_abort = On
max_execution_time = 86400

【.htaccessに設定する場合】
php_value ignore_user_abort On
php_value max_execution_time 86400

【プログラム中で設定する場合】
ignore_user_abort(1);
set_time_limit(86400);

ただし、PHPがセーフモードで動いている場合は効果がありません。また、ブラウザで処理に時間がかかるプログラムを呼び出した場合は、定期的に何かを出力していないとブラウザ側でタイムアウトしてしまう場合があります。(処理自体は最後まで実行されます)

参考:
PHP マニュアル その他の関数(Misc)
PHP マニュアル PHP オプションと情報(info)