php定时计划任务的实现方法详解


Posted in PHP onJune 06, 2013

我在uchome 中 分析到, uchome是这样做的
1. 把所有的计划任务存放到数据库
2. 每次用户进行操作或打开页面的时候都按排序执行一条计划任务. 也就是轮番判断,时间到了的, 就在用户进程中执行.
uchome的计划任务代码在 ./source/function_cron.php
上面只自己分析uchome代码关于计划任务大概的结果, 抛砖引玉. 希望谁有好的方法拿出来共享.
ignore_user_abort()
我前一段时间彻底研究过计划任务,认为计划任务的思路很多,但最适合Web的还是触发式的,就是类似于DZ和PHPWind的,似乎大多数web应用也都是这么做的,再说几种其他的供参考
1,为了提供稳定的触发,用crontab+wget或者ab提供定时访问
2,nohup + php写守护程序
3,直接用php写个死循环还提供触发,这时需要用缓存或者数据库来协助推出循环,还有必须用sleep或者usleep控制触发频率
4,crontab+php
5,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_limit0)可以设置程序的运行时间为无限制,php默认的运行时间是30秒,通过set_time_limit(0)可以让程序无限制的执行下去。在程序执行之前加上ignore_user_abort(1)和set_time_limit(0)即可以了,最终程序该如何写呢?给大家一个例子。

<?php
ignore_user_abort(); // run script in background
set_time_limit(0); // run script forever
$interval=30; // do every 15 minutes…
do{
$fp = fopen(‘text3.txt','a');
fwrite($fp,'test');
fclose($fp);
sleep($interval); // wait 15 minutes
}while(true);
?>

PHP 相关文章推荐
PHP XML操作类DOMDocument
Dec 16 PHP
php实现文件下载实例分享
Jun 02 PHP
PHP遍历目录并返回统计目录大小
Jun 09 PHP
PHP读取配置文件类实例(可读取ini,yaml,xml等)
Jul 28 PHP
详解在PHP的Yii框架中使用行为Behaviors的方法
Mar 18 PHP
php查询及多条件查询
Feb 26 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
Aug 30 PHP
PHP微信企业号开发之回调模式开启与用法示例
Nov 25 PHP
PHP简单实现记录网站访问量功能示例
Jun 06 PHP
php-fpm超时时间设置request_terminate_timeout资源问题分析
Sep 27 PHP
PHP迭代器和生成器用法实例分析
Sep 28 PHP
PHP的重载使用魔术方法代码实例详解
Feb 26 PHP
PHP使用DES进行加密与解密的方法详解
Jun 06 #PHP
php xml常用函数的集合(比较详细)
Jun 06 #PHP
PHP5函数小全(分享)
Jun 06 #PHP
解析php时间戳与日期的转换
Jun 06 #PHP
基于header的一些常用指令详解
Jun 06 #PHP
深入php 正则表达式的学习探讨
Jun 06 #PHP
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
Jun 06 #PHP
You might like
php将图片保存入mysql数据库失败的解决方法
2014/12/27 PHP
Laravel5中contracts详解
2015/03/02 PHP
PHP 对象接口简单实现方法示例
2020/04/13 PHP
使用Modello编写JavaScript类
2006/12/22 Javascript
JS 强制设为首页的代码
2009/01/31 Javascript
一次$.getJSON不执行的简单记录
2016/07/19 Javascript
原生JS实现图片左右轮播
2016/12/30 Javascript
浅谈jQuery的bind和unbind事件(绑定和解绑事件)
2017/03/02 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
2018/07/06 Javascript
在webstorm开发微信小程序之使用阿里自定义字体图标的方法
2018/11/15 Javascript
微信小程序分享功能onShareAppMessage(options)用法分析
2019/04/24 Javascript
jquery实现动态创建form并提交的方法示例
2019/05/27 jQuery
python登录QQ邮箱发信的实现代码
2013/02/10 Python
python根据京东商品url获取产品价格
2015/08/09 Python
Python实现简单的多任务mysql转xml的方法
2017/02/08 Python
你眼中的Python大牛 应该都有这份书单
2017/10/31 Python
pandas.read_csv参数详解(小结)
2019/06/21 Python
PyQt5响应回车事件的方法
2019/06/25 Python
Python使用type关键字创建类步骤详解
2019/07/23 Python
Django上使用数据可视化利器Bokeh解析
2019/07/31 Python
python绘制彩虹图
2019/12/16 Python
解决Pycharm 导入其他文件夹源码的2种方法
2020/02/12 Python
Python中flatten( ),matrix.A用法说明
2020/07/05 Python
python打开音乐文件的实例方法
2020/07/21 Python
python线程里哪种模块比较适合
2020/08/02 Python
水上运动奥特莱斯:Wasterports Outlet
2018/08/08 全球购物
thinkphp5 redis缓存新增方法实例讲解
2021/03/24 PHP
党员岗位承诺书
2014/03/25 职场文书
请假条标准格式规范
2014/04/10 职场文书
逃课打麻将检讨书
2014/10/05 职场文书
见义勇为事迹材料
2014/12/24 职场文书
绵山导游词
2015/02/05 职场文书
试用期自我评价怎么写
2015/03/10 职场文书
2015年党风建设工作总结
2015/04/29 职场文书
国庆阅兵观后感
2015/06/15 职场文书
CSS3 制作精美的定价表
2021/04/06 HTML / CSS