0
<?php
set_time_limit(600);
while (1){
usleep(30000000);
}
?>

上記のphpプログラムにより、500内部サーバーエラーが発生します。問題は、制限時間を600->10分に設定したことです。そして、10分間、それぞれ30秒間実行され、whileループが1回実行され、アクティビティが10分間維持されることを期待しています。ただし、ラウンド2分で500の内部サーバーエラーが返されます。根本的な原因/問題の解決方法は何ですか?ありがとう

4

2 に答える 2

3

あなたのコードを、私自身の Linux ベースの Web サーバーにスピンアップしました。IIS ではなく Linux サーバーを使用したのは、より多くのデバッグ情報が得られると考えたからです。あなたのコードは問題なく動作します。タイムアウトしません。その場合、IIS に固有のものがあると言わざるを得ません。イベントログをチェックします。500 エラーには興味深いものが含まれているはずです。イベント ログにアクセスするには ( http://msdn.microsoft.com/en-us/library/ms524984(v=vs.90).aspx ):

  • [スタート] メニューから [ファイル名を指定して実行] をクリックします。[名前] ボックスに と入力しeventvwrます。[OK] をクリックします。
  • イベント ビューアーは、[システム ツール] ノードの下に表示されます。

このプログラムを 10 分間待機させる必要がある場合は、PHP.ini ファイルに移動して (それが問題の場合)、max_execution_time を A LOT だけ上げるか、別の方法として、ページを 10 秒間放置し、次に、同じページを でリロードしますheader()。このアプローチの利点は、すべてをスピンしてロックするだけで余分な CPU サイクルを殺していないことです。代わりに、サーバーに再クエリを実行し、永続的な Cookie を使用しています。

<?php
echo "Time Slept: ".$_COOKIE['total_time_slept']; //persistent variable you can use to measure how much time has elapsed
if($_COOKIE['total_time_slept'] < 1000) //if less than 10 minutes
{     
    $page = $_SERVER['PHP_SELF'];
    $sec = 10;        
    setcookie('total_time_slept', $_COOKIE['total_time_slept']+$sec); //append that time to the counter
    header("Refresh: $sec; url=$page"); //reload this page every 10 seconds
}
?>
于 2013-03-22T08:40:11.857 に答える
0

PHP がsafe-modeで実行される LAMP インストールで、usleepに同様の問題がありました。

したがって、私の提案は、PHPがセーフモードで実行されているかどうかを確認することです。その場合は、sleep関数を使用してみてください (ただし、たとえば 0.001 秒ごとにループしたい場合は役に立ちません)。

また、PHP 5 までは、PHP Windows プラットフォームではusleepが機能しないことにも注意してください。

このスレッドが古いことは承知していますが、このチェックが他のスレッドに役立つことを願っています。

于 2015-06-09T09:49:32.027 に答える