59

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

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

  2. 機能を使用する上でリスクはありsleep()ますか? 多くの CPU パフォーマンスが必要ですか?

4

5 に答える 5

103

最大実行時間よりも長くスリープするスクリプトを用意してください。

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

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

于 2009-04-11T23:09:30.253 に答える
8

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

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

于 2009-04-11T23:15:03.530 に答える
8

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

  • php.ini のmax_execution_timeディレクティブ。これはグローバル設定です。
  • 上記のディレクティブでini_set()を使用します。これにより、現在実行中のスクリプトのみがその実行に対してのみ変更されます。
  • set_time_limit() : これもローカルな変更です。

最後の 2 つの違いについては、max_execution_time は一定量だと思います。ランニング:

ini_set('max_execution_time', 60);

スクリプトを 60 秒に制限します。20 秒後に呼び出した場合:

set_time_limit(60);

スクリプトは 20 + 60 = 80 秒に制限されます。

于 2009-04-11T23:13:07.467 に答える
0

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 秒ではありません。

于 2009-04-11T23:52:34.720 に答える
-6

a) はい、制限時間にカウントされます (したがって、sleep(31) はエラーを引き起こします)

b) CPU パフォーマンスを犠牲にするのとは反対のことを行います。他のアプリケーションが CPU を使用できるようにします (アプリケーションがスリープ状態になると、そのアプリケーションの CPU 使用率はほぼ 0% になります)。ユーザーから時間を奪うことを除けば、これを使用するリスクはまったく考えられません。

于 2009-04-11T23:10:59.047 に答える