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 相关文章推荐
第二节--PHP5 的对象模型
Nov 16 PHP
PHP中查询SQL Server或Sybase时TEXT字段被截断的解决方法
Mar 10 PHP
php 生成静态页面的办法与实现代码详细版
Feb 15 PHP
php 删除记录同时删除图片文件的实现代码
May 12 PHP
php生成随机密码的三种方法小结
Sep 04 PHP
浅谈apache和nginx的rewrite的区别
Feb 22 PHP
解析php 版获取重定向后的地址(代码)
Jun 26 PHP
php ci框架中加载css和js文件失败的原因及解决方法
Jul 29 PHP
Laravel 5框架学习之表单验证
Apr 08 PHP
PHP中通过trigger_error触发PHP错误示例
Jun 23 PHP
PHP socket 模拟POST 请求实例代码
Jul 18 PHP
PHP单例模式模拟Java Bean实现方法示例
Dec 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
《超神学院》霸气归来, 天使彦上演维多利亚的秘密
2020/03/02 国漫
关于svn冲突的解决方法
2013/06/21 PHP
PHP控制前台弹出对话框的实现方法
2016/08/21 PHP
在Laravel的Model层做数据缓存的实现
2019/09/26 PHP
php适配器模式简单应用示例
2019/10/23 PHP
PHP开发API接口签名生成及验证操作示例
2020/05/27 PHP
根据分辨率不同,调用不同的css文件
2006/08/25 Javascript
js setattribute批量设置css样式
2009/11/26 Javascript
jQuery 学习6 操纵元素显示效果的函数
2010/02/07 Javascript
Jquery练习之表单验证实现代码
2010/12/14 Javascript
运用JQuery的toggle实现网页加载完成自动弹窗
2014/03/18 Javascript
jQuery无刷新上传之uploadify3.1简单使用
2016/06/18 Javascript
js中通过getElementsByName访问name集合对象的方法
2016/10/31 Javascript
[05:05]DOTA2亚洲邀请赛 战队出场仪式
2015/02/07 DOTA
一个简单的python程序实例(通讯录)
2013/11/29 Python
用Python计算三角函数之atan()方法的使用
2015/05/15 Python
Python中join函数简单代码示例
2018/01/09 Python
详解Python发送email的三种方式
2018/10/18 Python
Python3 jupyter notebook 服务器搭建过程
2018/11/30 Python
python生成随机红包的实例写法
2019/09/02 Python
ubuntu上安装python的实例方法
2019/09/30 Python
django 扩展user用户字段inlines方式
2020/03/30 Python
Levi’s美国官网:美国著名的牛仔裤品牌
2016/08/19 全球购物
Right-on官方网站:日本知名的休闲服装品牌
2019/07/12 全球购物
简单说下OSPF的操作过程
2014/08/13 面试题
中科软测试工程师面试题
2012/06/16 面试题
大学生创业计划书的范文
2014/01/07 职场文书
圣诞节红领巾广播稿
2014/02/03 职场文书
乡镇信息公开实施方案
2014/03/23 职场文书
2014年学校国庆主题活动方案
2014/09/16 职场文书
2014领导班子正风肃纪思想汇报
2014/09/18 职场文书
2014年小学德育工作总结
2014/12/05 职场文书
2014年中班下学期工作总结
2014/12/11 职场文书
一个都不能少观后感
2015/06/04 职场文书
2016银行招聘自荐信
2016/01/28 职场文书
PHP设计模式(观察者模式)
2021/07/07 PHP