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 相关文章推荐
Discuz板块横排显示图片的实现方法
May 28 PHP
实用函数3
Nov 08 PHP
php实现用户在线时间统计详解
Oct 08 PHP
php购物车实现代码
Oct 10 PHP
PHP 转义使用详解
Jul 15 PHP
PHP文件缓存内容保存格式实例分析
Aug 20 PHP
php的GD库imagettftext函数解决中文乱码问题
Jan 24 PHP
PHP代码优化技巧小结
Sep 29 PHP
php实现计算百度地图坐标之间距离的方法
May 05 PHP
php通过两层过滤获取留言内容的方法
Jul 11 PHP
php基于闭包实现函数的自调用(递归)实例分析
Nov 11 PHP
通过代码实例解析PHP session工作原理
Dec 11 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
Mysql数据库操作类( 1127版,提供源码下载 )
2010/12/02 PHP
php代码收集表单内容并写入文件的代码
2012/01/29 PHP
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
php远程下载类分享
2016/04/13 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
2016/09/13 PHP
php 截取utf-8格式的字符串实例代码
2016/10/30 PHP
解决Laravel blade模板转义html标签的问题
2019/09/03 PHP
解析Javascript中大括号“{}”的多义性
2013/12/02 Javascript
JavaScript省市联动实现代码
2014/02/15 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
2016/11/22 Javascript
浅析Angular2子模块以及异步加载
2017/04/24 Javascript
jQuery Tree Multiselect使用详解
2017/05/02 jQuery
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
2017/07/11 Javascript
基于bootstrop常用类总结(推荐)
2017/09/11 Javascript
[原创]jquery判断元素内容是否为空的方法
2018/05/04 jQuery
webpack常用配置总览(小结)
2019/11/18 Javascript
跟老齐学Python之折腾一下目录
2014/10/24 Python
Python爬取三国演义的实现方法
2016/09/12 Python
Python读取文件内容的三种常用方式及效率比较
2017/10/07 Python
python3解析库BeautifulSoup4的安装配置与基本用法
2018/06/26 Python
对numpy中向量式三目运算符详解
2018/10/31 Python
Django框架 Pagination分页实现代码实例
2019/09/04 Python
python中常用的数据结构介绍
2021/01/12 Python
Python爬虫定时计划任务的几种常见方法(推荐)
2021/01/15 Python
Html5页面获取微信公众号的openid的方法
2020/05/12 HTML / CSS
全球最大的跑步用品商店:Road Runner Sports
2016/09/11 全球购物
师范应届生教师求职信
2013/11/05 职场文书
优秀教师推荐材料
2014/12/16 职场文书
会计岗位工作总结
2015/08/12 职场文书
2016天猫双十一广告语
2016/01/28 职场文书
使用pipenv管理python虚拟环境的全过程
2021/09/25 Python
剑指Offer之Java算法习题精讲二叉树的构造和遍历
2022/03/21 Java/Android
Python OpenCV超详细讲解调整大小与图像操作的实现
2022/04/02 Python
浅谈Node的内存泄露问题
2022/05/06 NodeJs
全网非常详细的pytest配置文件
2022/07/15 Python