sleep()
PHP の関数に関して 2 つの質問があります。
スリープ時間は PHP スクリプトの最大実行時間制限に影響しますか? PHP で「最大実行時間が 30 秒を超えました」というメッセージが表示されることがあります。を使用すると、このメッセージは表示されます
sleep(31)
か?機能を使用する上でリスクはあり
sleep()
ますか? 多くの CPU パフォーマンスが必要ですか?
最大実行時間よりも長くスリープするスクリプトを用意してください。
<?php
sleep(ini_get('max_execution_time') + 10);
?>
PHP sleep() pageから、このユーザー投稿のメモがあります。
注: set_time_limit() 関数と構成ディレクティブ max_execution_time は、スクリプト自体の実行時間にのみ影響します。system() を使用したシステム コール、sleep() 関数、データベース クエリなど、スクリプトの実行以外で発生したアクティビティに費やされた時間は、スクリプトの最大実行時間を決定する際には含まれません。
sleep() のようなシステムコールではなく、スクリプト時間にのみ影響します。どうやら、Windows で sleep() が含まれているバグがあるようです。最大実行時間はリアルタイムであり、CPU 時間などではありません。ただし、次のように変更できます。
最後の 2 つの違いについては、max_execution_time は一定量だと思います。ランニング:
ini_set('max_execution_time', 60);
スクリプトを 60 秒に制限します。20 秒後に呼び出した場合:
set_time_limit(60);
スクリプトは 20 + 60 = 80 秒に制限されます。
sleep() と PHP スクリプトの実行時間制限の基本については他の人が既に説明していますが、非常に長いスリープ期間を使用する場合の別のリスクにも注意する必要があります。
通常、ブラウザがサーバーにリクエストを送信し、サーバーからデータを受信しない場合、接続がタイムアウトする可能性があります。この制限時間はブラウザーの構成によって異なりますが、IE7 の既定値はわずか 30 秒で、Firefox の既定値は 115 秒であると読みました。Firefox で自分の構成を確認するには、about:configに移動します。 network.http.keep-alive.timeout のフィルタリング(時間制限は秒単位で指定されます)。
編集: network.http.keep-alive.timeout と browser.urlbar.search.timeout の単位が混同されていました。それは確かに秒単位であり、10 分の 1 秒ではありません。
a) はい、制限時間にカウントされます (したがって、sleep(31) はエラーを引き起こします)
b) CPU パフォーマンスを犠牲にするのとは反対のことを行います。他のアプリケーションが CPU を使用できるようにします (アプリケーションがスリープ状態になると、そのアプリケーションの CPU 使用率はほぼ 0% になります)。ユーザーから時間を奪うことを除けば、これを使用するリスクはまったく考えられません。