PHP ignore_user_abort函数详细介绍和使用实例


Posted in PHP onJuly 15, 2014

ignore_user_abort 设置与客户机断开是否会终止脚本的执行。

本函数返回 user-abort 设置的之前的值(一个布尔值)。
int ignore_user_abort ([ string $value ] )

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

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

例-1 一个的ignore_user_abort()的例子,配合set_time_limit()函数 和一个死循环就可以实现计划任务功能。

<?php

ignore_user_abort(true);

 

set_time_limit(0);

echo 'Testing connection handling in PHP';

while (1)

{

    if (connection_status() != CONNECTION_NORMAL) {

 

        break;

 

    }

    // Sleep for 10 seconds

    sleep(10);

}

?>

PHP内置函数研究系列第二期,采用PHP函数ignore_user_abort实现计划任务与持续进程实例,并通过一个可检测效果的实例讨论ignore_user_abort()函数的作用与用法。

ignore_user_abort() 可以实现当客户端关闭后仍然可以执行PHP代码,可保持PHP进程一直在执行,可实现所谓的计划任务功能与持续进程,只需要开启执行脚本,除非 apache等服务器重启或有脚本有输出,该PHP脚本将一直处于执行的状态,初看很实用,不过代价是一个PHP执行脚本的持续进程,开销很大,但却可以 实现很多意想不到的功 能。

其描述为设置与客户机断开是否会终止脚本的执行。

附:另一篇介绍

一,函数原型

int ignore_user_abort ( [bool setting] )

二,版本兼容
PHP 3 >= 3.0.7, PHP 4, PHP 5

三,函数基础用法与实例
1,函数基础用法

<?php

ignore_user_abort();

?>

说明:调用ignore_user_abort()函数声明即使客户机断开不终止脚本的执行。

2,结合set_time_limit()函数实现一个循环脚本执行任务

<?php

ignore_user_abort();

set_time_limit(0);

$interval=60*15;

do{

//执行的业务

}while(true);

?>

说明:每隔15分钟循环执行

3,自定义实现文件输出并跟踪ignore_user_abort()函数的执行结果

<?php

ignore_user_abort ( TRUE );

set_time_limit ( 0 );

$interval = 10;

$stop = 1;

do {

    if( $stop == 10 ) break;

    file_put_contents('liuhui.php',' Current Time: '.time().' Stop: '.$stop);

    $stop++;

    sleep ( $interval );

} while ( true );

?>

打开liuhui.php文件,文件内容如下:
Current Time: 1273735029 Stop: 9

其原理是即使客户端终止脚本,仍然每隔10秒钟执行一次,并打印出当前时间与终止点,这样就可以测试出ignore_user_abort()函数的具体效果。

通过实例发现ignore_user_abort()函数非常实用,实现计划任务,完成后续任务,持续进程等非常有效。更多说明请参与PHP手册。请关注下一期PHP内置函数研究系列。

PHP 相关文章推荐
PHP HTML JavaScript MySQL代码如何互相传值的方法分享
Sep 30 PHP
基于PHP生成静态页的实现方法
May 10 PHP
PHP中对缓冲区的控制实现代码
Sep 29 PHP
php截取中文字符串不乱码的方法
Dec 25 PHP
通过dbi使用perl连接mysql数据库的方法
Apr 16 PHP
Smarty模板学习笔记之Smarty简介
May 20 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
Dec 16 PHP
PHP中list()函数用法实例简析
Jan 08 PHP
PHP+sqlite数据库操作示例(创建/打开/插入/检索)
May 26 PHP
PHP 序列化和反序列化函数实例详解
Jul 18 PHP
PHP后台备份MySQL数据库的源码实例
Mar 18 PHP
PHP 使用位运算实现四则运算的代码
Mar 09 PHP
Linux下手动编译安装PHP扩展的例子分享
Jul 15 #PHP
可以保证单词完整性的PHP英文字符串截取代码分享
Jul 15 #PHP
PHP魔术引号所带来的安全问题分析
Jul 15 #PHP
PH P5.2至5.5、5.6的新增功能详解
Jul 14 #PHP
PHP文件锁定写入实例解析
Jul 14 #PHP
ThinkPHP惯例配置文件详解
Jul 14 #PHP
2014年10个最佳的PHP图像操作库
Jul 14 #PHP
You might like
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
2014/05/07 PHP
详解PHP执行定时任务的实现思路
2015/12/21 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
2016/10/28 PHP
JS链式调用的实现方法
2013/03/07 Javascript
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
2013/06/19 Javascript
jQuery老黄历完整实现方法
2015/01/16 Javascript
js实现鼠标感应图片展示的方法
2015/02/27 Javascript
利用HTML5的画布Canvas实现刮刮卡效果
2015/09/06 Javascript
JavaScript各类型的关系图解
2015/10/16 Javascript
javascript学习笔记整理(概述、变量、数据类型简介)
2015/10/25 Javascript
jquery ztree实现树的搜索功能
2016/02/25 Javascript
jQuery获取访问者IP地址的方法(基于新浪API与QQ查询接口)
2016/05/25 Javascript
JS实现仿PS的调色板效果完整实例
2016/12/21 Javascript
Node.js获取前端ajax提交的request信息
2017/02/20 Javascript
重新理解JavaScript的六种继承方式
2017/03/24 Javascript
详解vue-cli 接口代理配置
2017/12/13 Javascript
vue.js根据代码运行环境选择baseurl的方法
2018/02/28 Javascript
Echart折线图手柄触发事件示例详解
2018/12/16 Javascript
vue 对axios get pust put delete封装的实例代码
2020/01/05 Javascript
python扫描proxy并获取可用代理ip的实例
2017/08/07 Python
Python从零开始创建区块链
2018/03/06 Python
python实现整数的二进制循环移位
2019/03/08 Python
postman传递当前时间戳实例详解
2019/09/14 Python
python实现两个字典合并,两个list合并
2019/12/02 Python
40个你可能不知道的Python技巧附代码
2020/01/29 Python
Python selenium自动化测试模型图解
2020/04/15 Python
美国知名男士服饰品牌:Brooks Brothers(布克兄弟)
2016/08/25 全球购物
常用UNIX 命令(Linux的常用命令)
2015/12/26 面试题
建议书的格式
2014/05/12 职场文书
2015新学期家长寄语
2015/02/26 职场文书
2015年第十五个全民国防教育日宣传活动方案
2015/05/06 职场文书
Feign调用全局异常处理解决方案
2021/06/24 Java/Android
Node实现搜索框进行模糊查询
2021/06/28 Javascript
JVM的类加载器和双亲委派模式你了解吗
2022/03/13 Java/Android
Golang Elasticsearches 批量修改查询及发送MQ
2022/04/19 Golang
Go gRPC进阶教程gRPC转换HTTP
2022/06/16 Golang