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 Undefined index的问题
Jun 01 PHP
比较好用的PHP防注入漏洞过滤函数代码
Apr 11 PHP
深入解析php之apc
May 15 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
May 10 PHP
在SAE上搭建最新wordpress的方法
Dec 21 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
Oct 10 PHP
win7安装php框架Yii的方法
Jan 25 PHP
php查询操作实现投票功能
May 09 PHP
图文详解PHP环境搭建教程
Jul 16 PHP
php字符串操作针对负值的判断分析
Jul 28 PHP
PHP实现mysqli批量执行多条语句的方法示例
Jul 22 PHP
Laravel实现ApiToken认证请求
Oct 14 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 ajax 分页类代码
2008/11/13 PHP
详解PHP的Yii框架中组件行为的属性注入和方法注入
2016/03/18 PHP
CI框架常用方法小结
2016/05/17 PHP
Yii2选项卡的简单使用
2017/05/26 PHP
php日志函数error_log用法实例分析
2019/09/23 PHP
laravel admin实现分类树/模型树的示例代码
2020/06/10 PHP
FormValid0.5版本发布,带ajax自定义验证例子
2007/08/17 Javascript
google jQuery 引用文件,jQuery 引用地址集合(jquery 1.2.6至jquery1.5.2)
2011/04/24 Javascript
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
2011/11/10 Javascript
JS.GetAllChild(element,deep,condition)使用介绍
2013/09/21 Javascript
获取非最后一列td值并将title设为该值的方法
2013/10/30 Javascript
JavaScript必看小技巧(必看)
2016/06/07 Javascript
在JavaScript中调用Java类和接口的方法
2016/09/07 Javascript
如何理解Vue的.sync修饰符的使用
2017/08/17 Javascript
原生JS实现移动端web轮播图详解(结合Tween算法造轮子)
2017/09/10 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
使用vue中的混入mixin优化表单验证插件问题
2019/07/02 Javascript
layui实现根据table数据判断按钮显示情况的方法
2019/09/26 Javascript
vue h5移动端禁止缩放代码
2019/10/28 Javascript
JS实现秒杀倒计时特效
2020/01/02 Javascript
Django中url的反向查询的方法
2018/03/14 Python
更换Django默认的模板引擎为jinja2的实现方法
2018/05/28 Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
2020/05/20 Python
Python 操作SQLite数据库的示例
2020/10/16 Python
python实现图像随机裁剪的示例代码
2020/12/10 Python
当当网官方旗舰店:中国图书销售夺金品牌
2018/04/02 全球购物
元旦晚会邀请函
2014/01/27 职场文书
四年大学自我鉴定
2014/02/17 职场文书
《蓝色的树叶》教学反思
2014/02/24 职场文书
基督教婚礼主持词
2014/03/14 职场文书
教师对照四风自我剖析材料
2014/09/30 职场文书
党支部群众路线整改措施思想汇报
2014/10/10 职场文书
2014年销售人员工作总结
2014/11/27 职场文书
如何书写读后感?(附范文)
2019/07/26 职场文书
MySQL非空约束(not null)案例讲解
2021/08/23 MySQL
我收到了德劲DE1107
2022/04/05 无线电