1

2 つの広告があり、それらを 8 時間の差で実行したい場合はad1、スクリプトの開始時にすぐに開始し、秒ad2として指定された 8 時間後に開始することを意味します。関数と28800を探していますが、広告の間でそれらを使用する方法が少し混乱しています。sleep()time_sleep_until()

私の広告は配列で定義されています。また、sleepローカルホストで関数を 1 回実行して、1 つの広告をすぐに実行し、別の広告をすぐに実行しようとしましたsleep(28800)が、スクリプトは引き続き実行され、両方の広告の出力が表示されます。それは小さな問題かもしれませんし、ロジックを適切に適用していませんでした。

4

2 に答える 2

2

PHPが実際にここで何をするのかについて混乱があるようです。誰かがWebサーバーにリクエストを送信すると、PHPスクリプトが呼び出されますが、リクエストを処理した後、それが実行されて終了します。次のリクエストが届くと、最初のリクエストを認識していません。

この関数を使用しsleep(n)てn秒間スリープすると、Webサーバーの応答が一時停止します。これは非常に悪い考えであり、達成しようとしていることではありません。

一般的に、時間に基づいてコンテンツを切り替えたい場合は、実際には意味のない「サーバーの稼働時間」のようなものよりも、サーバーの時間(常に知られている)から作業する方が適切です。世界。

簡単な例で、8時間のブロックに基づいて3つの異なる広告を配信するとします。時刻を見つけて広告を適切に選択するコードを書くことができます。例えば:

$selection = (date('G',time()) / 8);
switch ($selection) {
  case 0:
    echo 'ad option 1!';
    break;
  case 1:
    echo 'ad option 2!';
    break;
  case 2:
    echo 'ad option 3!';
    break;
}

このdate('G',time())関数は、現在のシステム時刻の0〜23時間の部分を返します。これを8で割ると、0、1、または2のいずれかになり、そこから表示するものを選択できます。

これがあなたがやろうとしていることを正確に満たすかどうかはわかりません。そうでない場合は、ある種のデータベースを使用し、ある間隔で配信するように広告を更新するある種のジョブを実行する必要があります(可能な場合はこれを避けます)。

于 2012-06-11T06:52:21.510 に答える
0

スクリプトを長時間実行しないでください。代わりにcronを使用してください。同じスクリプトを8時間の差で、dbスイッチ呼び出しad_1またはad_2に基づいて呼び出すことができます。

于 2012-06-11T06:53:54.553 に答える