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 分页类 扩展代码
Jun 11 PHP
php+mysql实现数据库随机重排实例
Oct 17 PHP
php实现发送微信模板消息的方法
Mar 07 PHP
php实现paypal 授权登录
May 28 PHP
php文件操作相关类实例
Jun 18 PHP
php验证码生成代码
Nov 11 PHP
php通过淘宝API查询IP地址归属等信息
Dec 25 PHP
Yii实现简单分页的方法
Apr 29 PHP
PHP简单操作MongoDB的方法(安装及增删改查)
May 26 PHP
基于PHP生成简单的验证码
Jun 01 PHP
ThinkPHP5+Layui实现图片上传加预览功能
Aug 17 PHP
PHP字符串和十六进制如何实现互相转换
Jul 16 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使用ereg验证文件上传的方法
2014/12/16 PHP
php读取mssql的ntext字段返回值为空的解决方法
2014/12/30 PHP
php链表用法实例分析
2015/07/09 PHP
PHP快速生成各种信息提示框的方法
2016/02/03 PHP
自动检查并替换文本框内的字符
2006/06/30 Javascript
js常见表单应用技巧
2008/01/09 Javascript
鼠标滑上去后图片放大浮出效果的js代码
2011/05/28 Javascript
dtree 网页树状菜单及传递对象集合到js内,动态生成节点
2012/04/14 Javascript
javascript中attachEvent用法实例分析
2015/05/14 Javascript
jquery中实现时间戳与日期相互转换
2016/04/12 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
React Native react-navigation 导航使用详解
2017/12/01 Javascript
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
python web.py开发httpserver解决跨域问题实例解析
2018/02/12 Python
PyTorch快速搭建神经网络及其保存提取方法详解
2018/04/28 Python
python统计字母、空格、数字等字符个数的实例
2018/06/29 Python
在mac下查找python包存放路径site-packages的实现方法
2018/11/06 Python
对pandas数据判断是否为NaN值的方法详解
2018/11/06 Python
对python的输出和输出格式详解
2018/12/08 Python
python3中利用filter函数输出小于某个数的所有回文数实例
2019/11/24 Python
python实现飞机大战项目
2020/03/11 Python
Scrapy模拟登录赶集网的实现代码
2020/07/07 Python
Python根据字典的值查询出对应的键的方法
2020/09/30 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
2020/10/15 Python
如何使用Python进行PDF图片识别OCR
2021/01/22 Python
日本化妆品植村秀俄罗斯官方网站:Shu Uemura俄罗斯
2020/02/01 全球购物
经典c++面试题五
2014/12/17 面试题
C#里面可以避免一个类被其他类继承么?如何?
2013/09/26 面试题
金鑫耀Java笔试题
2014/09/06 面试题
平面设计师的工作职责
2013/11/21 职场文书
2014年服装销售工作总结
2014/11/27 职场文书
高三毕业评语
2014/12/31 职场文书
高三物理教学反思
2016/02/20 职场文书
大学生各类奖学金申请书
2019/06/24 职场文书
CSS3 实现NES游戏机的示例代码
2021/04/21 HTML / CSS
高端收音机+蓝牙音箱,JBL TUNER FM带收音蓝牙音箱评测
2021/04/24 无线电