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 相关文章推荐
利用js调用后台php进行数据处理原码
Oct 09 PHP
解析zend studio中直接导入svn中的项目的方法步骤
Jun 21 PHP
php递归json类实例
Dec 02 PHP
PHP异常处理Exception类
Dec 11 PHP
PHP精确计算功能示例
Nov 29 PHP
PHP编程计算日期间隔天数的方法
Apr 26 PHP
PHP封装的简单连接MongoDB类示例
Feb 13 PHP
laravel实现按时间日期进行分组统计方法示例
Mar 23 PHP
PHP中上传文件打印错误错误类型分析
Apr 14 PHP
Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】
May 08 PHP
Laravel使用原生sql语句并调用的方法
Oct 09 PHP
用php如何解决大文件分片上传问题
Jul 07 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 HtmlReplace输入过滤安全函数
2010/07/03 PHP
php多重接口的实现方法
2015/06/20 PHP
js获取单选按钮的数据
2006/11/27 Javascript
关于实现代码语法标亮 dp.SyntaxHighlighter
2007/02/02 Javascript
入门基础学习 ExtJS笔记(一)
2010/11/11 Javascript
jquery下为Event handler传递动态参数的代码
2011/01/06 Javascript
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
公共js在页面底部加载的注意事项介绍
2013/07/18 Javascript
按下Enter焦点移至下一个控件的实现js代码
2013/12/11 Javascript
排序算法的javascript实现与讲解(99js手记)
2014/09/28 Javascript
NodeJS中Buffer模块详解
2015/01/07 NodeJs
JS 滚动事件window.onscroll与position:fixed写兼容IE6的回到顶部组件
2016/10/10 Javascript
Javascript typeof与instanceof的区别
2016/10/18 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
Angularjs 1.3 中的$parse实例代码
2017/09/14 Javascript
[58:23]LGD vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python通过socket查询whois的方法
2015/07/18 Python
EM算法的python实现的方法步骤
2018/01/02 Python
Python实现的爬虫刷回复功能示例
2018/06/07 Python
git查看、创建、删除、本地、远程分支方法详解
2020/02/18 Python
基于python爬取有道翻译过程图解
2020/03/31 Python
HTML5+CSS3实例 :canvas 模拟实现电子彩票刮刮乐代码
2016/12/30 HTML / CSS
html5实现移动端适配完美写法
2017/11/16 HTML / CSS
BrandAlley英国:法国折扣奢侈品网上零售商
2017/07/03 全球购物
Muziker英国:中欧最大的音乐家商店
2020/02/05 全球购物
Servlet面试题库
2015/07/18 面试题
内刊编辑求职自荐书范文
2014/02/19 职场文书
师范毕业生求职信
2014/07/11 职场文书
小学教师师德师风演讲稿
2014/08/22 职场文书
2015年员工试用期工作总结
2014/12/12 职场文书
2015年师德师风承诺书
2015/01/22 职场文书
建筑安全员岗位职责
2015/02/15 职场文书
城管个人总结
2015/02/28 职场文书
国家助学贷款承诺书
2015/04/30 职场文书
Java比较两个对象中全部属性值是否相等的方法
2021/08/07 Java/Android
MySQL 开窗函数
2022/02/15 MySQL