ホームページ  >  記事  >  バックエンド開発  >  PHP でスケジュールされたタスクを実装するための sleep 関数の使用例の共有、phpsleep_PHP チュートリアル

PHP でスケジュールされたタスクを実装するための sleep 関数の使用例の共有、phpsleep_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:20:23965ブラウズ

PHP の sleep 関数を使用して、スケジュールされたタスクの例 phpsleep を共有します

一部のプログラムでは、定期的に実行する必要がある特別な関数がいくつかあります。Linux に詳しい友人は、これは簡単ではないと言うでしょう。これは確かに実現可能ですが、計画されたタスクに書き込む前に、具体的な実行時間を事前に把握しておく必要があります。たとえば、午前 2 時、午前 7 時、午前 6 時半などです。

ただし、この時間を予測できない場合があり、実行時間はプログラムによって動的に生成されます。次に、動的に生成された時刻の後に特定のプログラム フラグメントを実行します。各実行の時刻は動的に生成され、スケジュールされたタスクは固定時刻を知る必要があるため、ここで Linux の crontab を使用してタスクをスケジュールすることはできません。スケジュールされたタスクは使用できないため、これを実現する唯一の方法はプログラム自体から行うことです。

PHP にはスリープ関数があります。これは、プログラムの実行がスリープ関数に遭遇すると、N 秒間一時停止し、その後実行を継続することを大まかに意味します。たとえば、sleep(10) は、プログラムが sleep(10) ステートメントに遭遇した後、10 秒間一時停止してから実行を継続することを意味します。関数括弧内のパラメータは、一時停止時間の値を秒単位で表す数値です。以下のコードをご覧ください

コードをコピーします コードは次のとおりです:

/**
*スリープ機能の使い方
*瓊台ブログ
​*/
// 現在のプログラムのタイムスタンプを出力します
エコータイム(); // アウト:1338088780
エコー '
';

// 10 秒間一時停止します
睡眠(10);

// タイムスタンプを出力します
エコータイム(); // アウト:1338088790

上記プログラムの実行結果は
コードをコピーします コードは次のとおりです:

1338088780
1338088790

実行プロセスを分析してみましょう。最初のステップでは、現在のタイムスタンプ 1338088780 を出力し、10 秒間停止してからタイムスタンプを出力します。プログラムは 10 秒待ってからタイムスタンプを再度出力するため、最後のタイムスタンプは最初に出力されるタイムスタンプよりも 10 秒長くなければなりません。その結果、最後のタイムスタンプは 1338088790 になります。

上記の例では、sleep 関数は 1 回だけ使用しましたが、sleep() 関数はページ上で無制限に使用できます。次のコードを参照してください:

コードをコピーします コードは次のとおりです:

/**
*スリープ機能の使い方
*瓊台ブログ
​*/
// 最初のタイムスタンプを出力します
エコータイム(); // 出力: 1338088780
エコー '
';

// 10 秒間一時停止します
睡眠(10);

// 2 番目のタイムスタンプを出力します
エコータイム(); // 出力: 1338088790
エコー '
';

// 20 秒間一時停止します
睡眠(20);

// 3 番目のタイムスタンプを出力します
エコータイム(); // 出力: 1338088810

上記プログラムの実行結果は
コードをコピーします コードは次のとおりです:
1338088780
1338088790
1338088810

上記コードの実行プロセス:
まず、最初のタイムスタンプ 1338088780 を出力します
次に、10 秒間停止します
3 番目に、2 番目のタイムスタンプ 1338088790 を出力します。これは、最初のタイムスタンプに 10 秒を加えた合計です
4 番目に、20 秒間停止します
5 番目に、2 番目のタイムスタンプ 1338088790 に 20 秒を加えた合計である 3 番目のタイムスタンプ 1338088810 を出力します。

スリープはページに 2 回表示されます。1 回目は 10 秒、2 回目は 20 秒です。したがって、上記の例の実行には合計 30 秒かかります。 sleep() 関数がページ内に複数回出現する場合、前のコードは上書きされずに蓄積されます。

それでは、スリープと動的に生成されたタイムコードのスケジュールされた実行をどのように組み合わせるのでしょうか?次のコードを見てください:

コードをコピーします コードは次のとおりです:

/**
* スリープ関数は、期間を動的に生成するコードを定期的に実行します
*瓊台ブログ
​*/
// 現在時刻
echo date('Y-m-d H:i:s'); // 出力:2012-05-27 14:58:00
エコー '
';

// 動的生成時間の範囲は、今日の午後 6 時から午後 0 時までです
$datetime = date('Y-m-d').' '.rand('18,23').':'.rand('0,59').':'.rand('0,59'); // 2012-05-27 19:20:00

// タイムスタンプを計算します
$a = strtotime($datetime);

// 時差を計算します
$reduce = $a-time();

// 寝て待ってください
睡眠($reduce);

//実行時間後に実行されるコードブロック
echo date('Y-m-d H:i:s'); // 出力:2012-05-27 19:20:00

上記のコード出力:
コードをコピーします コードは次のとおりです:
2012-05-27 14:58:00
2012-05-27 19:20:00

分析: 現在時刻の出力を開始し、次にプログラム実行時刻 2012-05-27 19:20:00 をランダムに計算します。スリープは秒単位の値であるパラメーターを受け入れるため、生成された時刻は最初にタイムスタンプに変換されます。タイムスタンプから現在のタイムスタンプを減算して時間差を取得し、スリープして、ランダムに生成された時間に特定のステートメントを実行するプログラムのスケジュールされた実行効果を実現します。なお、秒単位の時間差を計算する必要があるため、秒差が計算できない場合はスリープ機能が使用できません。

最後に、一部の子供用シューズは、サンプルを実行中にプログラム実行エラーが発生し、タイムアウトを促すメッセージを表示する場合があります。この問題が発生してもパニックにならないでください。これは PHP のデフォルトのページ実行時間によって引き起こされます。PHP のデフォルトのページ実行時間は、一般的なプログラムには十分な時間です。ただし、同様のスケジュールされた実行関数を実行する場合は、ヘッダー ステートメントで実行時間を set_time_limit(0) に設定する必要があります。 0 は時間制限がないことを意味し、単位は秒です。最後に、全体的なコードを投稿します:

コードをコピーします コードは次のとおりです:

/**
* スリープ関数は、期間を動的に生成するコードを定期的に実行します
*瓊台ブログ
​*/
// ページの実行時間を設定します。そうしないと、タイムアウト エラー メッセージが表示されます
set_time_limit(0);

// 現在時刻
echo date('Y-m-d H:i:s'); // 出力:2012-05-27 14:58:00

// 動的生成時間の範囲は、今日の午後 6 時から午後 0 時までです
$datetime = date('Y-m-d').' '.rand('18,23').':'.rand('0,59').':'.rand('0,59'); // 2012-05-27 19:20:00

// タイムスタンプを計算します
$a = strtotime($datetime);

// 時差を計算します
$reduce = $a-time();

// 寝て待ってください
睡眠($reduce);

//実行時間後に実行されるコードブロック
echo date('Y-m-d H:i:s'); // 出力:2012-05-27 19:20:00


PHP でスクリプトのスケジュールされた実行を実装するにはどうすればよいですか?

PHPファイルを使用したい場合は、かろうじて使用できます
PHPにはsleep関数があります。具体的な使用方法は、時間を秒単位で指定するsleep(time)です
まず、PHPスクリプトを作成します
while( 1) {
//yourcode
sleep(3600*24);
}
?>
ここでの yourcode は、この目的を達成できますが、犠牲にする必要があります。 URL を介してこのスクリプトにアクセスすると、PHP ファイルが実行されるため、このリンクは中断できず、続行する必要があります。 !それ以外の場合は無効になります

PHP はリクエストごとに実行され、リクエストがあった場合にのみ実行されます。

PHPのsleep()関数の問題

最初の echo date("h:s:i") の前に echo str_pad(" ",256); を追加する必要があります。"\n";
IE はページを 256 バイト受信するまで待つ必要があるためです。が表示され始めましたが、最新バージョンの Firefox では表示する前に 1024 バイトを受信する必要があることが判明しました

www.bkjia.com本当http://www.bkjia.com/PHPjc/867248.html技術記事 PHP のスリープ関数を使用したスケジュールされたタスクの例を共有する phpsleep 一部のプログラムでは、スケジュールされた実行が必要な特殊な関数がいくつかありますが、Linux に詳しい友人は間違いなくこれは違うと言うでしょう。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:Yii 学習 (5) -- アクティブ レコードの関連付け、yii --active_PHP チュートリアル次の記事:Yii 学習 (5) -- アクティブ レコードの関連付け、yii --active_PHP チュートリアル

関連記事

続きを見る