我在uchome 中 分析到 uchome是这样做的
把所有的计划任务存放到数据库
每次用户进行操作或打开页面的时候都按排序执行一条计划任务 也就是轮番判断时间到了的 就在用户进程中执行
uchome的计划任务代码在 /source/function_cronphp
上面只自己分析uchome代码关于计划任务大概的结果 抛砖引玉 希望谁有好的方法拿出来共享
ignore_user_abort()
我前一段时间彻底研究过计划任务认为计划任务的思路很多但最适合Web的还是触发式的就是类似于DZ和PHPWind的似乎大多数web应用也都是这么做的再说几种其他的供参考
为了提供稳定的触发用crontab+wget或者ab提供定时访问
nohup + php写守护程序
直接用php写个死循环还提供触发这时需要用缓存或者数据库来协助推出循环还有必须用sleep或者usleep控制触发频率
crontab+php
web触发方式这也有区别一种是定时触发一种是定周期触发DZ和PHPWind都是定时触发我最后采用的是定周期触发
具体的实现思路 很容易想就不多说了
自己有主机肯定用crontab来执行命令行PHP
没有只能写在代码中了
用crontab会比较好 如果用循环的话 最好也要把循环和具体处理程序分开 不然内存会一直增加
今天一不小心在php手册上发现了这个函数ignore_user_abort这个函数可以帮助我们实现像linux中的cron一样实现计划任务下面一起来看下该如何来实现
首先看下php手册对这个函数的解释
Description
int ignore_user_abort ([ bool $setting ] )
Sets whether a client disconnect should cause a script to be aborted
也就是说无论客户端是否关闭浏览器下面的程序都会执行
再看下其参数
Parameters
setting
If not set the function will only return the current setting
这个函数接受一个参数来决定是否启用ignore_user_abort的功能
再看其返回值
Return Values
Returns the previous setting as a boolean
这里说返回前一次的设置并且是bool值得经过我的测试这个说法是不对的返回的明明是int型的不相信的话大家可以写一个php文件来测试下
说了这么多了到底该如何用php的这个函数实现计划任务呢?还跌借助另外一个函数这个函数是set_time_limit通过set_time_limit)可以设置程序的运行时间为无限制php默认的运行时间是秒通过set_time_limit()可以让程序无限制的执行下去在程序执行之前加上ignore_user_abort()和set_time_limit()即可以了最终程序该如何写呢?给大家一个例子
代码如下:<?phpignore_user_abort(); // run script in backgroundset_time_limit(); // run script forever$interval=; // do every minutes…do{$fp = fopen(‘texttxta);fwrite($fptest);fclose($fp);sleep($interval); // wait minutes}while(true);?>