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和AJAX创建RSS聚合器的代码
Mar 13 PHP
linux php mysql数据库备份实现代码
Mar 10 PHP
php HandlerSocket的使用
May 02 PHP
深入apache host的配置详解
Jun 09 PHP
一款简单实用的php操作mysql数据库类
Dec 08 PHP
深入浅析PHP无限极分类的案例教程
May 09 PHP
PHP构造函数与析构函数用法示例
Sep 28 PHP
php基于单例模式封装mysql类完整实例
Oct 18 PHP
利用switch语句进行多选一判断的实例代码
Nov 14 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
Dec 24 PHP
PHP创建对象的六种方式实例总结
Jun 27 PHP
php模拟实现斗地主发牌
Apr 22 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语法速查表
2007/01/02 PHP
PHP中call_user_func_array()函数的用法演示
2012/02/05 PHP
解析VS2010利用VS.PHP插件调试PHP的方法
2013/07/19 PHP
PHP模板引擎Smarty的缓存使用总结
2014/04/24 PHP
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
php用正则判断是否为数字的方法
2016/03/25 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
2017/02/10 PHP
Javascript Cookie读写删除操作的函数
2010/03/02 Javascript
jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法
2011/01/01 Javascript
基于JQuery的一句话搞定手风琴菜单
2012/09/14 Javascript
js中iframe调用父页面的方法
2014/10/30 Javascript
JavaScript表单焦点自动切换代码
2016/07/24 Javascript
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
2017/04/10 jQuery
用JS编写一个函数,返回数组中重复出现过的元素(实例)
2017/09/14 Javascript
浅谈webpack组织模块的原理
2018/03/10 Javascript
在vue中使用jointjs的方法
2018/03/24 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
微信小程序实现多图上传
2020/06/19 Javascript
vue 里面的 $forceUpdate() 强制实例重新渲染操作
2020/09/21 Javascript
python检查指定文件是否存在的方法
2015/07/06 Python
Python的Twisted框架中使用Deferred对象来管理回调函数
2016/05/25 Python
pytorch AvgPool2d函数使用详解
2020/01/03 Python
使用pycharm和pylint检查python代码规范操作
2020/06/09 Python
Python3如何在服务器打印资产信息
2020/08/27 Python
python爬虫爬取图片的简单代码
2021/01/18 Python
css3给背景图片加颜色遮罩的方法
2019/11/05 HTML / CSS
全球性的在线时尚男装零售商:boohooMAN
2016/12/17 全球购物
购买一个高级域名:BuyDomains
2018/03/11 全球购物
成教毕业生自我鉴定
2013/10/23 职场文书
车间班组长岗位职责
2013/11/13 职场文书
护士实习生自我鉴定范文
2013/12/10 职场文书
党的群众路线对照检查材料范文
2014/09/24 职场文书
导游词之山东八大关
2019/12/18 职场文书
go类型转换及与C的类型转换方式
2021/05/05 Golang
看完这篇文章获得一些java if优化技巧
2021/07/15 Java/Android
HTML5+CSS+JavaScript实现捉虫小游戏设计和实现
2021/10/16 HTML / CSS