使用PHP调度一次性请求

使用PHP调度一次性请求,php,php-5.3,Php,Php 5.3,我在自己的网站上有一个url,我想在预定的时间点击该url,一旦点击,该url将有不同的参数,例如: www.mysite.com?user_id=1 ==> execute this once 5 minutes from now www.mysite.com?user_id=2 ==> execute this once 10 minutes from now www.mysite.com?user_id=3 ==> execute this once 1

我在自己的网站上有一个url,我想在预定的时间点击该url,一旦点击,该url将有不同的参数,例如:

www.mysite.com?user_id=1    ==> execute this once 5 minutes from now
www.mysite.com?user_id=2    ==> execute this once 10 minutes from now
www.mysite.com?user_id=3    ==> execute this once 15 minutes from now
www.mysite.com?user_id=4    ==> execute this once 20 minutes from now
1379041200 www.mysite.com?user_id=1 1379051200 www.mysite.com?user_id=2 1379101200 www.mysite.com?user_id=3
如何在php中实现这一点?我曾考虑使用cron作业,但它似乎用于重复操作,而在本例中,我希望它只执行一次。我也在考虑使用sleep,但是sleep会阻止当前的执行。还有其他方法吗?

首先,创建一个文本文件,其中包含一个要使用时间戳更新的链接。例如:

www.mysite.com?user_id=1    ==> execute this once 5 minutes from now
www.mysite.com?user_id=2    ==> execute this once 10 minutes from now
www.mysite.com?user_id=3    ==> execute this once 15 minutes from now
www.mysite.com?user_id=4    ==> execute this once 20 minutes from now
1379041200 www.mysite.com?user_id=1 1379051200 www.mysite.com?user_id=2 1379101200 www.mysite.com?user_id=3 1379041200 www.mysite.com?用户id=1 1379051200 www.mysite.com?用户id=2 1379101200 www.mysite.com?用户id=3
若要添加更多链接,请在文件中附加更多要执行的链接和时间戳。然后每5分钟执行一次con作业。cron作业将检查是否存在时间戳小于当前时间戳的链接。

您可以添加等待时间参数,并将sleep放在代码的开头

www.mysite.com?user_id=1&wait_for=300

if(isset($_GET['wait_for'])) {
    sleep($_GET['wait_for']);
}

这样,您的实际文件代码将在延迟后执行

我希望它只执行一次
@invisal,就像我在上面指定的那样,从当前时间开始的X分钟,您是否认为您是该站点上唯一的访问者,或者其他人也经常访问该站点?嗯,您的意思是有人需要单击某个东西,那么这些链接将从指定的时间开始执行?一定有人做了些什么来触发这些,对吗?它不仅仅是神奇地决定自己触发。@invisal是的,没错。。因此,我将手动执行www.mysite.com?user_id=4,然后从那里它将自己的请求传播给其他用户_id。con作业将检查是否有时间戳小于当前时间戳的链接。===>这是自动完成的吗?我不需要编写任何代码?当然,你需要编写一些代码。首先,让cron作业执行一个读取文件的PHP代码(每5分钟一次)。逐行读取,并获取每行的时间戳。将其与当前时间戳进行比较。然后执行链接。明白了。。我认为这是cronjob的内置功能,当我有一个前面有时间戳的文本文件时,它会与执行作业的时间戳进行比较。顺便说一句,这完全是一个非常聪明和简单的黑客攻击。喜欢它:)@aherlambang,它确实需要归档。您还可以使用数据库。执行完任何链接后,只需从数据库中删除记录或从文件中删除一行即可。