スリープ時間は実行時間制限にカウントされますか?
質問
について2つ質問がありますが、 sleep()
PHP の関数:
スリープ時間は PHP スクリプトの最大実行時間制限に影響しますか?PHP で「最大実行時間 30 秒を超えました」というメッセージが表示されることがあります。を使用するとこのメッセージが表示されますか
sleep(31)
?使用する際に何かリスクはありますか
sleep()
関数?CPUのパフォーマンスにかなりの負担がかかりますか?
解決
あなたは自分の最大実行時間以上眠るスクリプトを持って、それを試してみてください。
<?php
sleep(ini_get('max_execution_time') + 10);
?>
スポイラー: Linuxでは、眠っている時間は無視され、しかし、Windowsの下では、実行時間としてカウントされます。に
他のヒント
これはスクリプト時間にのみ影響し、sleep() などのシステムコールには影響しません。Windows では sleep() が含まれているところに明らかにバグがあります。最大実行時間はほぼリアルタイムであり、CPU 時間などではありません。ただし、次のように変更できます。
- 最大実行時間 php.ini のディレクティブ。これはグローバル設定です。
- 使用する ini_set() 上記のディレクティブを使用します。これにより、現在実行中のスクリプトのみがその実行に対してのみ変更されます。
- set_time_limit():ローカルな変更も。
最後の 2 つの違いについては、max_execution_time は固定量だと思います。ランニング:
ini_set('max_execution_time', 60);
スクリプトは 60 秒に制限されます。20 秒後に電話をかけた場合:
set_time_limit(60);
スクリプトは 20 + 60 = 80 秒に制限されます。
PHPスリープ()ページから、このユーザー投稿による注記があります:
注:関数set_time_limit() そして、設定ディレクティブ max_execution_timeには影響を与え スクリプト自体の実行時間。 その活動に費やさいつでも の実行外に起こります システムが使用して呼び出すようなスクリプト システム()、スリープ()関数で、 データベースクエリなどが含まれていません 最大時間を決定するときに スクリプトが実行されています。
sleep() の基本と PHP スクリプトの実行時間制限については他の人がすでに説明していますが、非常に長いスリープ期間を使用する場合は別のリスクにも注意する必要があります。
通常、ブラウザがサーバーにリクエストを送信し、サーバーからデータを受信しない場合、接続がタイムアウトになる可能性があります。この時間制限はブラウザの設定によって異なりますが、IE7 のデフォルト値はわずか 30 秒であると読みましたが、 Firefox のデフォルト値は 115 秒です--Firefox で独自の設定を確認するには、次のリンクにアクセスします。 概要:設定 そしてフィルタリング ネットワーク.http.キープアライブ.タイムアウト (制限時間は秒単位で指定します)。
編集:network.http.keep-alive.timeoutとbrowser.urlbar.search.timeoutの単位が混同されていました。確かに、10分の1秒ではなく、秒単位です。
A)はい、それは時間制限に向かってカウントする(そうスリープ(31)エラーをトリガする)
B)はCPU性能を原価計算の反対を行う - それは他のアプリケーション(アプリケーションが眠るときに、そのアプリケーションのCPU使用率が0%に近くなります)CPUを使用することができます。別に、ユーザから離れて時間を割いてから、私は本当にこれを使用して、任意のリスクを考えることはできません。