0

私は Apache 2.2 PHP 5.3 MySQL 5.5 アプリケーションを持っています。page1.php のフォームは、ユーザー入力を受け入れます。値は GET を使用して page2.php に渡されます。page2.php の PHP スクリプトは MySQL クエリを実行し、結果を表示します。ユーザー入力パラメーターに応じて、クエリは 3 ~ 900 秒実行される場合があります。

私のテストでは、実行時間が 300 秒未満のクエリの結果はすべて OK と表示されます。実行時間の長いクエリはサーバー上で正常に完了しますが (たとえば、500 秒後に CPU 負荷が 90% から 0% になることがわかります)、ブラウザーに結果が表示されず、ステータス バーに "Transfering data from my.host.org . ..」

この時点で、同じブラウザー (Firefox) の新しいインスタンスでアプリケーションのページを開こうとすると、タブヘッダーに「接続中...」と表示され、タブヘッダーに「my.host.org を待っています...」と表示されますステータスバー。この時点で、アプリケーションの任意のページを他のブラウザー (IE) で開いても問題ありません。

以下は、これまでに変更/設定した設定ですが、役に立ちませんでした。どんなアイデアでも役に立ちます。ありがとうございました。

apache2.conf:
Timeout 300  -> 1800

php.ini:
user_ini.cache_ttl = 300  -> 1800
max_execution_time = 30  -> 1800
default_socket_timeout = 60  -> 1800
mysql.connect_timeout = 60 -> 1800

page2.php: 
ignore_user_abort(1);
4

1 に答える 1

0

これが実行時間の長いクエリであることを考えると、本当にブラウザ ウィンドウで実行する必要があるのでしょうか?

Cron ジョブを使用して出力を電子メール アドレスにリダイレクトすることを検討する必要があります。CLI で実行される PHP プロセスは、デフォルトで実行時間が無制限です。

最後に、PHP を (F)CGI として実行している場合は、PHP プロセスからの出力をもう少し待つように CGI 設定を変更する必要があるかもしれません。

于 2012-08-12T23:17:18.590 に答える