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中文件上传的安全问题
Oct 09 PHP
PHP语言中global和$GLOBALS[]的分析 之二
Feb 02 PHP
PHP生成不重复标识符的方法
Nov 21 PHP
js+php实现静态页面实时调用用户登陆状态的方法
Jan 04 PHP
php设计模式之单例模式代码
Jun 11 PHP
PHP设计模式之工厂模式与单例模式
Sep 28 PHP
php中strlen和mb_strlen用法实例分析
Nov 12 PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
Feb 17 PHP
PHP实现中国公民身份证号码有效性验证示例代码
May 03 PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 PHP
PHP+redis实现的悲观锁机制示例
Jun 12 PHP
PHP使用QR Code生成二维码实例
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
数字转英文
2006/12/06 PHP
PHP 正则表达式小结
2015/02/12 PHP
PHP基于socket实现客户端和服务端通讯功能
2017/07/13 PHP
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
2011/10/24 Javascript
JQuery表格内容过滤的实现方法
2013/07/05 Javascript
jquery对象和javascript对象即DOM对象相互转换
2014/08/07 Javascript
JavaScript使用Prototype实现面向对象的方法
2015/04/14 Javascript
javascript实现任务栏消息提示的简单实例
2016/05/31 Javascript
分类解析jQuery选择器
2016/11/23 Javascript
详解获取jq ul第一个li定位的四种解决方案
2016/11/23 Javascript
微信小程序 数据封装,参数传值等经验分享
2017/01/09 Javascript
js实现按座位号抽奖
2017/04/05 Javascript
JavaScript-定时器0~9抽奖系统详解(代码)
2017/08/16 Javascript
AngularJS实现的select二级联动下拉菜单功能示例
2017/10/25 Javascript
jQuery实现checkbox即点即改批量删除及中间遇到的坑
2017/11/11 jQuery
详解PHP后期静态绑定分析与应用
2018/03/21 Javascript
vue打包的时候自动将px转成rem的操作方法
2018/06/20 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
2018/09/15 Javascript
Vue中的$set的使用实例代码
2018/10/08 Javascript
vue-cli 目录结构详细讲解总结
2019/01/15 Javascript
详解ES6中的Map与Set集合
2019/03/22 Javascript
在Node.js中将SVG图像转换为PNG,JPEG,TIFF,WEBP和HEIF格式的方法
2019/08/22 Javascript
JavaScript定时器常见用法实例分析
2019/11/15 Javascript
vue props 单项数据流实例分享
2020/02/16 Javascript
在Python中使用dict和set方法的教程
2015/04/27 Python
Python加pyGame实现的简单拼图游戏实例
2015/05/15 Python
Python中函数的参数传递与可变长参数介绍
2015/06/30 Python
Python实现抢购IPhone手机
2018/02/07 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
2018/03/05 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
2019/09/25 Python
Python连接Hadoop数据中遇到的各种坑(汇总)
2020/04/14 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
python多线程semaphore实现线程数控制的示例
2020/08/10 Python
如何使用Python自动生成报表并以邮件发送
2020/10/15 Python
豪华复古化妆:Besame Cosmetics
2019/09/06 全球购物
澳大利亚商务邀请函
2014/01/17 职场文书