5

スリープがタイムアウトなどでカウントされる場合、これは通常の質問の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を検索しました が、試してみたいかどうかわかりません。他に何か提案はありますか?

4

2 に答える 2

7

max_execution_timeスクリプトの実行時間自体(スクリプトのCPU時間)のみを制限します。OSコンテキストが別のプロセスに切り替わり、そこでしばらく時間を費やした場合、そのプロセスもカウントされません。したがって、実際の時間を測定し、30秒後にタイムアウトを期待することは、どの時点でも当てはまりません。そしてもちろん、それはネットワーク時間も無視systemexecます

于 2012-06-29T09:16:59.333 に答える
0

(コメントによると)一定の時間が経過した後にタイムアウトする必要がある場合は、電話してみませんか

 $startscript = microtime();

 //do some stuff

if (microtime() - $startscript > 1500)
{
  dotimeout();
}


  // do more stuff

if (microtime() - $startscript > 1500)
{
  dotimeout();
}

  // do more stuff

if (microtime() - $startscript > 1500)
{
  dotimeout();
}

あなたはジストを取得します。あまりきれいではありませんが、うまくいくかもしれません。

于 2012-06-29T13:44:15.110 に答える