スリープがタイムアウトなどでカウントされる場合、これは通常の質問の1つではありません。問題は次のとおりです。PHPのmax_execution_timeを15秒に設定しました。理想的には、設定された制限を超えるとタイムアウトになるはずですが、そうではありません。php.iniファイルへの変更後にApacheが再起動され、ini_get('max_execution_time')はすべて正常です。スクリプトが最大200秒間実行されることがありますが、これはおかしなことです。データベース通信は一切ありません。スクリプトが行うのは、UNIXファイルシステム上のファイルを検索することと、場合によっては別のJSPページにリダイレクトすることだけです。スクリプトにはsleep()はありません。
PHPスクリプトの合計実行時間を次のように計算します。
スクリプトの開始時に、次のように設定しました。
$_mtime = microtime();
$_mtime = explode(" ",$_mtime);
$_mtime = $_mtime[1] + $_mtime[0];
$_gStartTime = $_mtime;
終了時間($ _gEndTime)も同様に計算されます。
合計時間は、私が登録したシャットダウン関数で計算されます。
register_shutdown_function('shutdown');
.............
function shutdown()
{
..............
..............
$_total_time = $_gEndTime - $_gStartTime;
..............
switch (connection_status ())
{
case CONNECTION_NORMAL:
....
break;
....
case CONNECTION_TIMEOUT:
....
break;
......
}
}
注: PHPのバージョンに互換性がないため、$ _SERVER['REQUEST_TIME']を使用できません。それはひどいです-私は知っています。
1)さて、私の最初の質問は明らかに、設定されたタイムアウト制限の後でもPHPスクリプトが実行されるのはなぜですか?
2)Apacheには300秒のTimeoutディレクティブがありますが、PHPバイナリはApache構成を読み取らないため、これは問題にはなりません。
3)何かがPHPをスリープモードに送信している可能性はありますか?
4)実行時間を間違った方法で計算していますか?これを行うためのより良い方法はありますか?
私はこの時点で困惑しています。PHPウィザード-助けてください。
編集:いくつかのログでは、ストリーム操作が原因ではないことがわかりました。ストリーミング操作が実行されていない場合でも、遅延はスクリプト内でランダムに発生します。コンテキストの切り替えが理由かもしれません。しかし、私にはまだ明確な答えがありません。LinuxでPHPのRealmax_execution_timeを検索しました が、試してみたいかどうかわかりません。他に何か提案はありますか?