<?php
set_time_limit(600);
while (1){
usleep(30000000);
}
?>
上記のphpプログラムにより、500内部サーバーエラーが発生します。問題は、制限時間を600->10分に設定したことです。そして、10分間、それぞれ30秒間実行され、whileループが1回実行され、アクティビティが10分間維持されることを期待しています。ただし、ラウンド2分で500の内部サーバーエラーが返されます。根本的な原因/問題の解決方法は何ですか?ありがとう
<?php
set_time_limit(600);
while (1){
usleep(30000000);
}
?>
上記のphpプログラムにより、500内部サーバーエラーが発生します。問題は、制限時間を600->10分に設定したことです。そして、10分間、それぞれ30秒間実行され、whileループが1回実行され、アクティビティが10分間維持されることを期待しています。ただし、ラウンド2分で500の内部サーバーエラーが返されます。根本的な原因/問題の解決方法は何ですか?ありがとう
あなたのコードを、私自身の 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
}
?>
PHP がsafe-modeで実行される LAMP インストールで、usleepに同様の問題がありました。
したがって、私の提案は、PHPがセーフモードで実行されているかどうかを確認することです。その場合は、sleep関数を使用してみてください (ただし、たとえば 0.001 秒ごとにループしたい場合は役に立ちません)。
また、PHP 5 までは、PHP Windows プラットフォームではusleepが機能しないことにも注意してください。
このスレッドが古いことは承知していますが、このチェックが他のスレッドに役立つことを願っています。