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 相关文章推荐
用Socket发送电子邮件(利用需要验证的SMTP服务器)
Oct 09 PHP
php visitFile()遍历指定文件夹函数
Aug 21 PHP
Trying to clone an uncloneable object of class Imagic的解决方法
Jan 11 PHP
基于PHP 面向对象之成员方法详解
May 04 PHP
php防止伪造的数据从URL提交方法
Jun 27 PHP
PHP中文编码小技巧
Dec 25 PHP
使用Appcan客户端自动更新PHP版本号(全)
Jul 31 PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
Sep 23 PHP
thinkPHP简单调用函数与类库的方法
Mar 15 PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
Aug 18 PHP
如何利用PHP实现上传图片功能详解
Sep 24 PHP
详解thinkphp的Auth类认证
May 28 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 抽象类的简单应用
2011/09/06 PHP
phpexcel导出excel的颜色和网页中的颜色显示不一致
2012/12/11 PHP
PHP代码审核的详细介绍
2013/06/13 PHP
PHP中你应该知道的require()文件包含的正确用法
2015/06/12 PHP
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
js克隆对象、数组的常用方法介绍
2013/09/26 Javascript
javascript:void(0)的作用示例介绍
2013/10/28 Javascript
js实现图片旋转的三种方法
2014/04/10 Javascript
jquery 新建的元素事件绑定问题解决方案
2014/06/12 Javascript
jQuery实现响应浏览器缩放大小并改变背景颜色
2014/10/31 Javascript
javascript框架设计读书笔记之模块加载系统
2014/12/02 Javascript
js中的面向对象入门
2017/03/06 Javascript
AngularJS中的拦截器实例详解
2017/04/07 Javascript
微信小程序实现的贪吃蛇游戏【附源码下载】
2018/01/03 Javascript
Angular利用trackBy提升性能的方法
2018/01/26 Javascript
用Python编写脚本使IE实现代理上网的教程
2015/04/23 Python
Python简单检测文本类型的2种方法【基于文件头及cchardet库】
2016/09/18 Python
Java与Python两大幸存者谁更胜一筹呢
2018/04/12 Python
python 中的列表生成式、生成器表达式、模块导入
2019/06/19 Python
使用Python的Turtle绘制哆啦A梦实例
2019/11/21 Python
PyCharm 在Windows的有用快捷键详解
2020/04/07 Python
Keras使用ImageNet上预训练的模型方式
2020/05/23 Python
Python调用百度OCR实现图片文字识别的示例代码
2020/07/17 Python
什么是Python包的循环导入
2020/09/08 Python
python破解同事的压缩包密码
2020/10/14 Python
CSS3 实现雷达扫描图的示例代码
2020/09/21 HTML / CSS
在阿尔卑斯山或希腊度过快乐假期:Alpine Elements
2019/12/28 全球购物
如何将字串String转换成整数int
2015/02/21 面试题
大学生水果店创业计划书
2014/01/28 职场文书
加多宝凉茶广告词
2014/03/18 职场文书
俞敏洪一分钟演讲稿
2014/08/26 职场文书
绵山导游词
2015/02/05 职场文书
离职证明格式样本
2015/06/12 职场文书
tensorflow中的梯度求解及梯度裁剪操作
2021/05/26 Python
Java新手教程之ArrayList的基本使用
2021/06/20 Java/Android
MySQL日期时间函数知识汇总
2022/03/17 MySQL