PHPファイルで、処理に時間がかかるものを
動作させていると2分程度で、処理途中に500エラーで落ちてしまいます。
原因、解決策を教えていただけませんでしょうか。
宜しくお願い致します。
共有サーバは、負荷制限の為に個々のphp.iniの設定に関わらず
処理が長いと途中で切られてしまうものでしょうか?
ファイルの権限に関しては、
動作させているsample1.phpが755
sample1.phpを入れているフォルダも755を設定しています。
エラーログは下記が出ていました。
--------------------------------
Premature end of script headers: sample1.php
--------------------------------
プログラムについては下記を動作させてます。
sample1.php
--------------------------------
<?php
sleep(300);
echo "処理が完了しました";
--------------------------------
php.ini
関係あるとおもわれる箇所をあげました。
処理時間の設定は、無制限にしています。
--------------------------------
safe_mode = Off
max_execution_time = 0
--------------------------------
>php.iniの設定に関わらず
phpだけでなく apache の Timeout による制限もあります。
Timeout の設定は apache の httpd.conf にて行いますので、
ユーザーは手を出せません。デフォルト300秒ですが、
共有サーバーでは短めに設定されていたりします。
(お使いのサーバーの設定については直接問い合わせてください。)
>sleep(300);
phpからの返信が300秒もの長きに渡って滞るため、
apacheが「phpで何かあった」と判断して500エラーを返します。
apacheにエラーと判断させないためには例えば下記のようにして、
何らかの通信を発生させてみるなどがあります。
sleep(100); echo ' '; flush(); sleep(100); echo ' '; flush(); sleep(100); echo ' '; flush();
バッファを利用すると意味がないのでflush();しています。
XserverのTimeoutデフォルト設定については未確認のため、
100でもまだ長いかもしれませんし200でもいけるかもしれません。
上記は、あくまでも一時的措置です。
完全な解決のためには処理を早く終わらせる方法を考えてください。
(データベースを使っているならばテーブル構成や発行するSQLの再考、
php側で処理せずデータベースで処理させるなどの負荷分散、
他のフレームワークの利用、php以外の言語への移行などなど…。)
コメント(0件)