2

次のコードで 500 またはタイムアウト ページのようなエラーが発生することを期待していました。

<?php
      ini_set('max_execution_time',5);
      set_time_limit(5);
      echo 'start';
      sleep(10);
      echo '<br/>hi';

ただし、次のようなものが得られます。

始める
こんにちは

私は何か間違ったことをしましたか?

私が望むのは、5 番目の秒でタイムアウトしたときにスクリプトが停止したことを確認することだけなので、2 番目のエコーは実行されるべきではありません (これは非常に奇妙な要件であることはわかっています)。

誰でも光を細断できますか、ありがとう。

PS: sleep() の部分はかなり気を散らしているようです。コードを次のように変更してはどうでしょうか。

<?php
      ini_set('max_execution_time',5);
      set_time_limit(5);
      echo 'start';
      for($i=1;$i<100000000;$i++){
          if($i%100==2) echo $i;
          else echo '--';
      }
      echo '<br/>hi';
4

1 に答える 1

6

php.net のこのコメントによると、UNIX を使用している必要があります... 「Linux ではスリープ時間は無視されますが、Windows では実行時間としてカウントされることに注意してください。」(Unix/Linux では、スリープは実行時間の一部として考慮されません。)

さらに、タイムアウトさせるには、単純に永久にループします

<?php
while (true) {
    // i'll error out after max_execution_time
}

その時間を確認するには、マイクロタイムを使用して実行時間を調べるか、設定した max_execution_time 変数について問い合わせます。

$max_time = ini_get("max_execution_time");
echo $max_time
?>

UPDATE 更新されたコードでは、出力は期待どおりです。

Fatal error: Maximum execution time of 5 seconds exceeded in newfile.php on line 7
于 2012-08-09T04:10:16.397 に答える