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实现用户在线时间统计详解
Oct 08 PHP
解析PHP自带的进位制之间的转换函数
Jun 08 PHP
网页上facebook分享功能具体实现
Jan 26 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
Dec 26 PHP
在Nginx上部署ThinkPHP项目教程
Feb 02 PHP
php微信公众账号开发之前五个坑(一)
Sep 18 PHP
php 截取utf-8格式的字符串实例代码
Oct 30 PHP
yii框架搜索分页modle写法
Dec 19 PHP
IOS 开发之NSDictionary转换成JSON字符串
Aug 14 PHP
PHP实现的回溯算法示例
Aug 15 PHP
PHP抽象类与接口的区别详解
Mar 21 PHP
PHP实现常用排序算法的方法
Feb 05 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
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
2007/09/30 PHP
[原创]php使用curl判断网页404(不存在)的方法
2016/06/23 PHP
微信公众号OAuth2.0网页授权问题浅析
2017/01/21 PHP
PHP后期静态绑定之self::限制实例分析
2018/12/21 PHP
Laravel框架基于ajax实现二级联动功能示例
2019/01/17 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
2020/04/06 PHP
网络之美 JavaScript中Get和Set访问器的实现代码
2010/09/19 Javascript
jsp+javascript打造级连菜单的实例代码
2013/06/14 Javascript
jQuery入门基础知识学习指南
2015/08/14 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
实例讲解jQuery EasyUI tree中state属性慎用
2016/04/01 Javascript
基于javascript bootstrap实现生日日期联动选择
2016/04/07 Javascript
JavaScript的模块化开发框架Sea.js上手指南
2016/05/12 Javascript
微信小程序 progress组件详解及实例代码
2016/10/25 Javascript
一个简易时钟效果js实现代码
2020/03/25 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
2019/07/04 jQuery
如何优雅地取消 JavaScript 异步任务
2020/03/22 Javascript
详解JavaScript 高阶函数
2020/09/14 Javascript
[01:30:54]《加油DOTA》 第三期
2014/08/18 DOTA
[50:58]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 Mineski vs EG
2018/04/03 DOTA
打印出python 当前全局变量和入口参数的所有属性
2009/07/01 Python
Python读csv文件去掉一列后再写入新的文件实例
2017/12/28 Python
python3调用百度翻译API实现实时翻译
2018/08/16 Python
解决django model修改添加字段报错的问题
2019/11/18 Python
Python实现点云投影到平面显示
2020/01/18 Python
python 实现一个图形界面的汇率计算器
2020/11/09 Python
在PyCharm中安装PaddlePaddle的方法
2021/02/05 Python
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
英国鞋类及配饰零售商:Kurt Geiger
2017/02/04 全球购物
Shein英国:女性时尚网上商店
2019/04/10 全球购物
教师党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
怎样写观后感
2015/06/19 职场文书
导游词之河北白洋淀
2020/01/15 职场文书
Python爬虫之爬取哔哩哔哩热门视频排行榜
2021/04/28 Python
redis通过6379端口无法连接服务器(redis-server.exe闪退)
2021/05/08 Redis
教你使用RustDesk 搭建一个自己的远程桌面中继服务器
2022/08/14 Servers