2012-06-11 108 views
1

我有两个广告并希望在8小时内运行它们,意味着ad1在脚本启动时立即启动,ad2在指定为8小时后启动28800秒。我正在寻求功能sleep()time_sleep_until(),但有点困惑如何使用它们之间的广告。如何在特定时间后在脚本中运行特定条件php

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

+0

您能否提供更多关于这些广告投放方式的信息? PHP脚本是通过Web服务器提供服务还是在命令行上运行?在这种情况下,“脚本启动时立即”是什么意思? 'sleep(n)'函数将保持当前进程运行n秒,这听起来不像你想要的。 – futureal

+0

不是100%确定你的意思,但['sleep()'](http://php.net/manual/en/function.sleep.php)只会延迟脚本的执行(停在中间),然后一起显示输出。如果你想根据一天的时间渲染不同的广告,你很可能不得不操作['time()'](http://php.net/manual/en/function.time.php)功能,并根据相对时间显示它们,则必须将广告最后一次切换到的时间存储在db字段或txt文件中,然后在加载页面时检查该时间。 –

+0

@futureal:是的,PHP脚本通过网络服务器发布并在市场上发布这些广告。广告的定义如下:array('name'=>"adname", 'desc'=>"aboutad", 'link'="marketlink");,我们将它们编码为json并发送到服务器。并立即意味着当脚本启动php产生第一个广告和8小时后产生另一个。实际上,我认为睡眠会停止脚本一段时间,然后再次处理并产生另一个广告。 – Shashank

回答

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,并从那里你可以选择要显示的内容。

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

+0

+1非常好解释,我现在没有提交答案,我想不出一个比“PHP运行服务器端并在完成处理hurrdurr后生成的HTML”更好的解释,你详细解释了如何'sleep()'以一种简单的方式工作,很好地完成。而解决方案本身简单实用。 –

+0

@futureal:但是如果我必须随机选择这些广告的8小时,就像ad1运行8小时,ad2在ad1之后运行......如何得到这一个。没有使用数据库,脚本可以吗? – Shashank

+0

为了实现这一点,您需要拥有某种持久性信息,这需要数据库或其他类型的服务器端存储。你可以使用cron任务来每隔一段时间更新一次文件,然后只是提供该文件的内容,但这看起来确实是不必要的。如果您只需要投放随机广告,但并不总是按相同顺序投放,则可以使用其他算术技巧,如模数运算符。例如,月份中的某天%3将始终为您提供一个介于0和2之间的值,该值根据当天而变化,依此类推。但是你可能需要一个数据库。 – futureal

0

你不应该跑这么长时间的脚本。改用cron。您可以以8小时不同的时间调用相同的脚本,并基于数据库切换呼叫ad_1或ad_2。

+0

由于我的SDK只知道一个广告所在的脚本,并且cron完全不同于这个问题。由于cron执行您的时区定义的脚本,我想在特定时间后执行一些字符串。 – Shashank

+0

?..............什么? –

相关问题