PHP定时任务的设计方法

php不像Java,不直接支持定时任务,而且php是单线程,这决定了php内部不能创建另一个线程启动定时任务。
如果php服务运行在linux下,可以使用crontab,在window下可以使用系统的计划任务,但这种针对具体平台编程的方法不推荐。
剩下的办法是结合while循环和sleep暂停功能,思路如下:
定义一个boolean型的变量。
每次while循环都判断这个boolean变量,如果是true,则执行业务逻辑代码,否则跳出循环。代码示例
ignore_user_abort();
set_time_limit();
while(true){
if($condition==true){
//business logic
……
}else{
break;
}
sleep($interval);
}
注意:
1)while上面的两行代码说明:
ignore_user_abort():默认情况下,如果客户端取消请求,这php响应会中断,即使是在处理过程中。这个方法的作用是让php忽略客户端的取消请求,这样能保证php响应不会被客户端中断掉。
set_time_limit():php服务器对php响应有个默认的执行时间,一般是30秒,超时的响应进程会被服务器中止。这个方法的作用是设置超时时间为无限长,这样就不会被服务器端中止掉。
2)因为php不能像Java一样可以在应用程序启动时执行代码,你必须手动请求下这个包含该方法的URL。
3)该方法会占用一个PHP进程,所以客户端会一直处于请求状态,得不到返回值。所以请求完以后需要这个请求页面,甚至关闭浏览器。

发表评论

电子邮件地址不会被公开。 必填项已用*标注