Xserver(共有サーバ)にて動作させているPHPに関してです。


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
--------------------------------

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/03/19 10:25:37
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:windofjuly No.1

回答回数2625ベストアンサー獲得回数1149

ポイント100pt

>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以外の言語への移行などなど…。)

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません