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 相关文章推荐
基于mysql的论坛(3)
Oct 09 PHP
一个简单的PHP&amp;MYSQL留言板源码
Jul 19 PHP
php 文件上传系统手记
Oct 26 PHP
在php和MySql中计算时间差的方法
Apr 22 PHP
PHPMYADMIN导入数据最大为2M的解决方法
Apr 23 PHP
php获取目标函数执行时间示例
Mar 04 PHP
ThinkPHP标签制作教程
Jul 10 PHP
PHP基于curl post实现发送url及相关中文乱码问题解决方法
Nov 25 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
Jun 13 PHP
laravel5.1框架model类查询的实现方法
Oct 08 PHP
php+layui数据表格实现数据分页渲染代码
Oct 26 PHP
浅谈如何提高PHP代码质量之端到端集成测试
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
fleaphp crud操作之find函数的使用方法
2011/04/23 PHP
php遍历文件夹所有文件子文件夹函数代码
2013/11/27 PHP
PHP实现文件下载断点续传详解
2014/10/15 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
2015/09/20 PHP
基于php实现随机合并数组并排序(原排序)
2015/11/26 PHP
快速查找数组中的某个元素并返回下标示例
2013/09/03 Javascript
ExtJS4中的requires使用方法示例介绍
2013/12/03 Javascript
将查询条件的input、select清空
2014/01/14 Javascript
JavaScript DOM元素尺寸和位置
2015/04/13 Javascript
微信小程序中实现一对多发消息详解及实例代码
2017/02/14 Javascript
完美解决手机浏览器顶部下拉出现网页源或刷新的问题
2017/11/30 Javascript
原来JS还可以这样拆箱转换详解
2019/02/01 Javascript
layui form表单提交后实现自动刷新
2019/10/25 Javascript
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
2019/10/27 Javascript
js实现录音上传功能
2019/11/22 Javascript
javascript实现雪花飘落效果
2020/08/19 Javascript
JS实现百度搜索框
2021/02/25 Javascript
Python装饰器的函数式编程详解
2015/02/27 Python
python去除空格和换行符的实现方法(推荐)
2017/01/04 Python
Python实现网站注册验证码生成类
2017/06/08 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
2017/11/29 Python
python写一个md5解密器示例
2018/02/23 Python
pandas数据清洗,排序,索引设置,数据选取方法
2018/05/18 Python
python re模块的高级用法详解
2018/06/06 Python
Python将list中的string批量转化成int/float的方法
2018/06/26 Python
python使用wxpy轻松实现微信防撤回的方法
2019/02/21 Python
Python进阶之@property动态属性的实现
2019/04/01 Python
python代码实现逻辑回归logistic原理
2019/08/07 Python
Django框架 Pagination分页实现代码实例
2019/09/04 Python
Canvas globalCompositeOperation
2018/12/18 HTML / CSS
校园学雷锋活动月总结
2014/03/09 职场文书
协议书格式
2014/04/23 职场文书
新闻学专业求职信
2014/07/28 职场文书
行政答辩状范文
2015/05/21 职场文书
2016优秀护士先进个人事迹材料
2016/02/25 职场文书
ipad隐藏软件app图标方法
2022/04/19 数码科技