web-dev-qa-db-ja.com

スリープ時間は実行時間制限にカウントされますか?

PHPのsleep()関数に関して2つの質問があります。

  1. PHPスクリプトの最大実行時間制限にスリープ時間は影響しますか?時々、PHPは「最大実行時間30秒を超えました」というメッセージを表示します。 sleep(31)?を使用すると、このメッセージが表示されますか?

  2. sleep() functionを使用する際にリスクはありますか? CPUパフォーマンスは高くなりますか?

50
caw

あなたはそれを試すべきです、あなたの最大実行時間を超えてスリープするスクリプトを持っているだけです。

<?php
  sleep(ini_get('max_execution_time') + 10);
?>

スポイラー: Linuxではスリープ時間は無視されますが、Windowsでは実行時間としてカウントされます。

86
Samuel

スクリプト時間にのみ影響し、sleep()のようなシステムコールには影響しません。 Windowsにsleep()が含まれているバグがあるようです。最大実行時間は、CPU時間などのリアルタイムではなく、ほぼリアルタイムです。ただし、次のように変更できます。

  • max_execution_time 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秒に制限されます。

8
cletus

PHP sleep()ページ から、このユーザー投稿のメモがあります。

注:set_time_limit()関数と構成ディレクティブmax_execution_timeは、スクリプト自体の実行時間にのみ影響します。スクリプトが実行された最大時間を決定する際、system()を使用したシステムコール、sleep()関数、データベースクエリなど、スクリプトの実行外で発生するアクティビティに費やされた時間は含まれません。

7
karim79

他の人はすでに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秒ではありません。

0
Calvin