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动态生成静态HTML网页的代码
Mar 04 PHP
PHP备份/还原MySQL数据库的代码
Jan 06 PHP
php之Memcache学习笔记
Jun 17 PHP
php使用反射插入对象示例分享
Mar 11 PHP
php使用百度ping服务代码实例
Jun 19 PHP
PHP源码分析之变量的存储过程分解
Jul 03 PHP
Yii核心组件AssetManager原理分析
Dec 02 PHP
codeigniter显示所有脚本执行时间的方法
Mar 21 PHP
如何用PHP来实现一个动态Web服务器
Jul 29 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
Jun 13 PHP
PHP filesize函数用法浅析
Feb 15 PHP
laravel框架中表单请求类型和CSRF防护实例分析
Nov 23 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
PHP二维数组的去重问题解析
2011/07/17 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
setInterval 和 setTimeout会产生内存溢出
2008/02/15 Javascript
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
2010/03/20 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
2013/08/13 Javascript
jquery实现input输入框实时输入触发事件代码
2014/01/28 Javascript
jQuery选择器简明总结(含用法实例,一目了然)
2014/04/25 Javascript
javascript几个易错点记录
2014/11/26 Javascript
node.js中的fs.lchmodSync方法使用说明
2014/12/16 Javascript
Jquery日历插件制作简单日历
2015/10/28 Javascript
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
JS中判断某个字符串是否包含另一个字符串的五种方法
2018/05/03 Javascript
jQuery实现鼠标移入移出事件切换功能示例
2018/09/06 jQuery
Makefile/cmake/node-gyp中区分判断不同平台的方法
2018/12/18 Javascript
vue中利用simplemde实现markdown编辑器(增加图片上传功能)
2019/04/29 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
2019/09/03 Javascript
浅谈Vue 自动化部署打包上线
2020/06/14 Javascript
Python中的类与对象之描述符详解
2015/03/27 Python
Python 40行代码实现人脸识别功能
2017/04/02 Python
python用match()函数爬数据方法详解
2019/07/23 Python
django的ORM操作 增加和查询
2019/07/26 Python
简单了解python中的f.b.u.r函数
2019/11/02 Python
python标准库OS模块函数列表与实例全解
2020/03/10 Python
ToysRus日本官网:玩具反斗城
2018/09/08 全球购物
计算机软件个人的自荐信范文
2013/12/01 职场文书
就业意向书范文
2014/04/01 职场文书
爱耳日活动总结
2014/04/30 职场文书
优秀少先队工作者事迹材料
2014/05/13 职场文书
大学生党员学习焦裕禄精神思想汇报
2014/09/10 职场文书
2014年设备管理工作总结
2014/11/26 职场文书
开会迟到检讨书范文
2015/05/06 职场文书
校车安全管理责任书
2015/05/11 职场文书
2015年教师国培感言
2015/08/01 职场文书
2016年综治宣传月活动宣传标语口号
2016/03/16 职场文书
MySQL基础快速入门知识总结(附思维导图)
2021/09/25 MySQL
详解redis在微服务领域的贡献
2021/10/16 Redis