php计划任务之ignore_user_abort函数实现方法


Posted in PHP onJanuary 08, 2015

本文实例讲述了php计划任务之ignore_user_abort函数实现方法。分享给大家供大家参考。具体分析如下:

PHP 不会检测到用户是否已断开连接,直到尝试向客户机发送信息为止,简单地使用 echo 语句无法确保信息发送,参阅 flush() 函数,代码如下:

<?php 

 ignore_user_abort(true); 

 set_time_limit(0); 

 

 while(1) { 

 $fp  = fopen('time_task.txt',"a+"); 

 
$str = date("Y-m-d h:i:s")."nr"; 

 
fwrite($fp,$str); 

 
fclose($fp); 

 
sleep(5);    //半小时执行一次

 } 

?>

定义和用法

ignore_user_abort() 函数设置与客户机断开是否会终止脚本的执行,本函数返回 user-abort 设置的之前的值(一个布尔值).

语法:ignore_user_abort(setting)

参数 描述
setting 可选,如果设置为 true,则忽略与用户的断开,如果设置为 false,会导致脚本停止运行,如果未设置该参数,会返回当前的设置.

提示和注释

注释:PHP 不会检测到用户是否已断开连接,直到尝试向客户机发送信息为止,简单地使用 echo 语句无法确保信息发送,参阅 flush() 函数.

以下是补充资料

先来个简单的例子:

<?php
//php定时计划任务
ignore_user_abort(); // 函数设置与客户机断开是否会终止脚本的执行
set_time_limit(0); // 来设置一个脚本的执行时间为无限长
$interval=30;
do{
$fp = fopen(‘text3.txt','a');
fwrite($fp,'test');
fclose($fp);
sleep($interval); // 函数延迟代码执行若干秒
}while(true);
?>

首先,运行该程序,然后关闭该页面,程序仍然运行中,test会每隔30秒的填补到text3.txt文件。
最后介绍下php手册中的相关的知识:

1.连接处理:
在 PHP 内部,系统维护着连接状态,其状态有三种可能的情况:

0 ? NORMAL(正常)

1 ? ABORTED(异常退出)

2 ? TIMEOUT(超时)

当 PHP 脚本正常地运行 NORMAL 状态时,连接为有效。当远程客户端中断连接时,ABORTED 状态的标记将会被打开。远程客户端连接的中断通常是由用户点击 STOP 按钮导致的。当连接时间超过 PHP 的时限时,TIMEOUT 状态的标记将被打开。

可以决定脚本是否需要在客户端中断连接时退出。有时候让脚本完整地运行会带来很多方便,即使没有远程浏览器接受脚本的输出。默认的情况是当远程客户 端连接中断时脚本将会退出。该处理过程可由 php.ini 的 ignore_user_abort 或由 Apache .conf 设置中对应的”php_value ignore_user_abort”以及 ignore_user_abort() 函数来控制。如果没有告诉 PHP 忽略用户的中断,脚本将会被中断,除非通过 register_shutdown_function() 设置了关闭触发函数。通过该关闭触发函数,当远程用户点击 STOP 按钮后,脚本再次尝试输出数据时,PHP 将会检测到连接已被中断,并调用关闭触发函数。

脚本也有可能被内置的脚本计时器中断。默认的超时限制为 30 秒。这个值可以通过设置 php.ini 的 max_execution_time 或 Apache .conf 设置中对应的”php_value max_execution_time”参数或者 set_time_limit() 函数来更改。当计数器超时的时候,脚本将会类似于以上连接中断的情况退出,先前被注册过的关闭触发函数也将在这时被执行。在该关闭触发函数中,可以通过调 用 connection_status() 函数来检查超时是否导致关闭触发函数被调用。如果超时导致了关闭触发函数的调用,该函数将返回 2。

注意:ABORTED 和 TIMEOUT 状态可以同时有效。这在告诉 PHP 忽略用户的退出操作时是可能的。PHP 将仍然注意用户已经中断了连接但脚本仍然在运行的情况。如果到了运行的时间限制,脚本将被退出,设置过的关闭触发函数也将被执行。在这时会发现函数 connection_status() 返回 3。

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
PHP 文件上传进度条的两种实现方法的代码
Nov 25 PHP
php数组函数序列之array_unique() - 去除数组中重复的元素值
Oct 29 PHP
PHP遍历并打印指定目录下所有文件实例
Feb 10 PHP
jQuery中的RadioButton,input,CheckBox取值赋值实现代码
Feb 18 PHP
php中stdClass的用法分析
Feb 27 PHP
php提交表单发送邮件的方法
Mar 20 PHP
php实现在站点里面添加邮件发送的功能
Apr 28 PHP
Laravle eloquent 多对多模型关联实例详解
Nov 22 PHP
PHP性能分析工具xhprof的安装使用与注意事项
Dec 19 PHP
PHP实现与java 通信的插件使用教程
Aug 11 PHP
PHP实现统计代码行数小工具
Sep 19 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
Oct 12 PHP
网站防止被刷票的一些思路与方法
Jan 08 #PHP
分享常见的几种页面静态化的方法
Jan 08 #PHP
php的ddos攻击解决方法
Jan 08 #PHP
php的sso单点登录实现方法
Jan 08 #PHP
PHP制作万年历
Jan 07 #PHP
CI框架中通过hook的方式实现简单的权限控制
Jan 07 #PHP
CI框架中site_url()和base_url()的区别
Jan 07 #PHP
You might like
PL-880隐藏功能
2021/03/01 无线电
PHP小技巧搜集,每个PHPer都来露一手
2007/01/02 PHP
利用php递归实现无限分类 格式化数组的详解
2013/06/08 PHP
php项目中百度 UEditor 简单安装调试和调用
2015/07/15 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
javascript document.images实例
2008/05/27 Javascript
JQuery中html()方法使用不当带来的陷阱
2011/04/07 Javascript
js实现网站首页图片滚动显示
2013/02/04 Javascript
基于jquery插件制作左右按钮与标题文字图片切换效果
2013/11/07 Javascript
javascript拖拽上传类库DropzoneJS使用方法
2013/12/05 Javascript
解析Node.js异常处理中domain模块的使用方法
2016/02/16 Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
2016/07/14 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
Vue.js框架路由使用方法实例详解
2017/08/25 Javascript
vue.js todolist实现代码
2017/10/29 Javascript
layui监听下拉选框选中值变化的方法(包含监听普通下拉选框)
2019/09/24 Javascript
微信小程序点击保存图片到本机功能
2019/12/13 Javascript
[02:11]DOTA2上海特级锦标赛主赛事第二日RECAP
2016/03/04 DOTA
python概率计算器实例分析
2015/03/25 Python
Python 关于反射和类的特殊成员方法
2017/09/14 Python
python导出hive数据表的schema实例代码
2018/01/22 Python
pycharm new project变成灰色的解决方法
2019/06/27 Python
django的csrf实现过程详解
2019/07/26 Python
html5 offlline 缓存使用示例
2013/06/24 HTML / CSS
BASIC HOUSE官方旗舰店:韩国著名的服装品牌
2018/09/27 全球购物
Tessabit日本:集世界奢侈品和设计师品牌的意大利精品买手店
2020/01/07 全球购物
财务管理专业应届毕业生求职信
2013/09/22 职场文书
期末总结的个人自我评价
2013/11/02 职场文书
精彩的推荐信范文
2013/11/26 职场文书
国际政治个人自荐信范文
2013/11/26 职场文书
餐厅总经理岗位职责
2013/12/31 职场文书
2014年教师培训的自我评价
2014/01/03 职场文书
化工厂员工工作总结
2015/10/15 职场文书
Python 数据结构之十大经典排序算法一文通关
2021/10/16 Python
python中字符串String及其常见操作指南(方法、函数)
2022/04/06 Python
Java 获取Word中所有的插入和删除修订的方法
2022/04/06 Java/Android