如何在php中的特定时间后在脚本中运行特定条件

时间:2012-06-11 06:15:59

标签: php time sleep

我有两个广告,并希望在相差8小时的情况下运行它们,意味着ad1在脚本启动时立即启动,ad2在指定为28800秒后的8小时后启动。我正在寻找函数sleep()time_sleep_until(),但有点混淆了如何在广告之间使用它们。

我的广告是在数组中定义的。此外,我在本地主机中尝试了一次sleep功能,立即执行一个广告,在sleep(28800)之后执行另一个广告,脚本继续执行并显示两个广告的输出。这可能是一个小问题,我没有正确应用逻辑。

2 个答案:

答案 0 :(得分: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,然后你可以选择要显示的内容。

不确定这会完全满足您的要求。如果没有,您可能需要涉及某种类型的数据库,并且有某种工作可以更新广告以便在某个时间间隔内投放(如果可能,我会避免这种情况)。

答案 1 :(得分:0)

你不应该长时间运行脚本。请改用cron。您可以在8小时差异的基础上调用相同的脚本,并基于数据库切换调用ad_1或ad_2。