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基础知识:控制结构
Dec 13 PHP
php 文件上传系统手记
Oct 26 PHP
用来解析.htgroup文件的PHP类
Sep 05 PHP
php include和require的区别深入解析
Jun 17 PHP
Codeigniter整合Tank Auth权限类库详解
Jun 12 PHP
一个经典的PHP验证码类分享
Nov 18 PHP
PHP判断是否连接上网络的方法
Jul 01 PHP
PHP实现递归目录的5种方法
Oct 27 PHP
PHP curl 或 file_get_contents 获取需要授权页面的方法
May 05 PHP
php实现的pdo公共类定义与用法示例
Jul 19 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
May 30 PHP
YII2框架中添加自定义模块的方法实例分析
Mar 18 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
与数据库连接
2006/10/09 PHP
PHP 读取和修改大文件的某行内容的代码
2009/10/30 PHP
PHP正确配置mysql(apache环境)
2011/08/28 PHP
使用dump函数,给php加断点测试
2013/06/25 PHP
WordPress中登陆后关闭登陆页面及设置用户不可见栏目
2015/12/31 PHP
PHP中include()与require()的区别说明
2017/02/14 PHP
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
jQuery弹性滑动导航菜单实现思路及代码
2013/05/02 Javascript
nodejs实现黑名单中间件设计
2014/06/17 NodeJs
深入理解JavaScript系列(47):对象创建模式(上篇)
2015/03/04 Javascript
AngularJS使用ui-route实现多层嵌套路由的示例
2018/01/10 Javascript
动态加载权限管理模块中的Vue组件
2018/01/16 Javascript
简单理解Vue中的nextTick方法
2018/01/30 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
微信小程序实现评论功能
2018/11/28 Javascript
使用JavaScript保存文本文件到本地的两种方法
2019/01/22 Javascript
Koa 中的错误处理解析
2019/04/09 Javascript
详解Node.js一行命令上传本地文件到服务器
2019/04/22 Javascript
vue实现鼠标经过动画
2019/10/16 Javascript
原生js实现碰撞检测
2020/03/12 Javascript
python在linux中输出带颜色的文字的方法
2014/06/19 Python
通过Python使用saltstack生成服务器资产清单
2016/03/01 Python
python Django批量导入不重复数据
2016/03/25 Python
详解python的几种标准输出重定向方式
2016/08/15 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
2018/05/28 Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
2020/02/29 Python
python 双循环遍历list 变量判断代码
2020/05/04 Python
基于plt.title无法显示中文的快速解决
2020/05/16 Python
Python虚拟环境venv用法详解
2020/05/25 Python
解决Pycharm 运行后没有输出的问题
2021/02/05 Python
Lululemon加拿大官网:加拿大知名体育服装零售商
2019/04/12 全球购物
俄罗斯护发和专业化妆品购物网站:Hihair
2019/09/28 全球购物
开业庆典活动策划方案
2014/09/21 职场文书
预备党员群众路线思想汇报2014
2014/10/25 职场文书
单位介绍信格式范文
2015/05/04 职场文书
52条SQL语句教你性能优化
2021/05/25 MySQL