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语法(4)
Oct 09 PHP
56.com视频采集接口程序(PHP)
Sep 22 PHP
php设计模式 DAO(数据访问对象模式)
Jun 26 PHP
PHP函数学习之PHP函数点评
Jul 05 PHP
PHP类与对象中的private访问控制的疑问
Nov 01 PHP
PHP数据类型之整数类型、浮点数的介绍
Apr 28 PHP
使用php清除bom示例
Mar 03 PHP
Zend Framework创建自己的动作助手详解
Mar 05 PHP
PHP 7.0新增加的特性介绍
Jun 08 PHP
PHP性能分析工具xhprof的安装使用与注意事项
Dec 19 PHP
wordpress自定义标签云与随机获取标签的方法详解
Mar 22 PHP
如何通过PHP实现Des加密算法代码实例
May 09 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
laravel容器延迟加载以及auth扩展详解
2015/03/02 PHP
举例讲解PHP面对对象编程的多态
2015/08/12 PHP
php mongodb操作类 带几个简单的例子
2016/08/25 PHP
file模式访问网页时iframe高度自适应解决方案
2013/01/16 Javascript
jQuery子属性过滤选择器用法分析
2015/02/10 Javascript
jQuery实现仿QQ空间装扮预览图片的鼠标提示效果代码
2015/10/30 Javascript
JavaScript中各种引用类型的常用操作方法小结
2016/05/05 Javascript
Vue.js一个文件对应一个组件实践
2016/10/27 Javascript
JS实现简单短信验证码界面
2017/08/07 Javascript
vue动画之点击按钮往上渐渐显示出来的实例
2018/09/29 Javascript
微信小程序自定义toast的实现代码
2018/11/16 Javascript
使用python搭建Django应用程序步骤及版本冲突问题解决
2013/11/19 Python
python翻译软件实现代码(使用google api完成)
2013/11/26 Python
python中合并两个文本文件并按照姓名首字母排序的例子
2014/04/25 Python
python处理按钮消息的实例详解
2017/07/11 Python
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
Django自定义用户认证示例详解
2018/03/14 Python
Pytorch上下采样函数--interpolate用法
2020/07/07 Python
使用python爬取抖音app视频的实例代码
2020/12/01 Python
Python爬虫之Selenium下拉框处理的实现
2020/12/04 Python
html5 canvas简单封装一个echarts实现不了的饼图
2018/06/12 HTML / CSS
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
加拿大约会网站:EliteSingles.ca
2018/01/12 全球购物
银行介绍信范文
2014/01/10 职场文书
电子信息科学专业自荐信
2014/01/30 职场文书
小学教师师德演讲稿
2014/05/06 职场文书
网上祭先烈心得体会
2014/09/01 职场文书
土地转让协议书
2014/09/27 职场文书
服务整改报告
2014/11/06 职场文书
学前班学生评语
2014/12/29 职场文书
2015年财务人员个人工作总结
2015/07/27 职场文书
网吧员工管理制度
2015/08/05 职场文书
2016秋季田径运动会广播稿
2015/12/21 职场文书
详解Laravel制作API接口
2021/05/31 PHP
Spring中bean的生命周期之getSingleton方法
2021/06/30 Java/Android