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 相关文章推荐
一个ubbcode的函数,速度很快.
Oct 09 PHP
PHP 网页过期时间的控制代码
Jun 29 PHP
ThinkPHP后台首页index使用frameset时的注意事项分析
Aug 22 PHP
PHP生成json和xml类型接口数据格式
May 17 PHP
PHP的Yii框架的常用日志操作总结
Dec 08 PHP
深入讲解PHP的Yii框架中的属性(Property)
Mar 18 PHP
yii2 modal弹窗之ActiveForm ajax表单异步验证
Jun 13 PHP
Discuz论坛密码与密保加密规则
Dec 19 PHP
删除PHP数组中的重复元素的实现代码
Apr 10 PHP
Ajax中的JSON格式与php传输过程全面解析
Nov 14 PHP
PHP实现字符串的全排列详解
Apr 24 PHP
Git命令之分支详解
Mar 02 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 GD库生成图像的几个函数总结
2014/11/19 PHP
php递归创建目录的方法
2015/02/02 PHP
PHP基于MySQL数据库实现对象持久层的方法
2015/06/17 PHP
一个无限级XML绑定跨框架菜单(For IE)
2007/01/27 Javascript
JS 遮照层实现代码
2010/03/31 Javascript
入门基础学习 ExtJS笔记(一)
2010/11/11 Javascript
一款jquery特效编写的大度宽屏焦点图切换特效的实例代码
2013/08/05 Javascript
js 操作select与option(示例讲解)
2013/12/20 Javascript
用js替换除数字与逗号以外的所有字符的代码
2014/06/07 Javascript
jQuery中:reset选择器用法实例
2015/01/04 Javascript
javascript实现的简单的表单验证
2015/07/10 Javascript
详解WordPress开发中get_current_screen()函数的使用
2016/01/11 Javascript
Ionic 2 实现列表滑动删除按钮的方法
2017/01/22 Javascript
深入理解Angular4中的依赖注入
2017/06/07 Javascript
vue动态路由实现多级嵌套面包屑的思路与方法
2017/08/16 Javascript
详解angularjs实现echart图表效果最简洁教程
2017/11/29 Javascript
JavaScript 高性能数组去重的方法
2018/09/20 Javascript
复习Python中的字符串知识点
2015/04/14 Python
pymongo为mongodb数据库添加索引的方法
2015/05/11 Python
在Django框架中运行Python应用全攻略
2015/07/17 Python
栈和队列数据结构的基本概念及其相关的Python实现
2015/08/24 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
2020/02/28 Python
Python通过文本和图片生成词云图
2020/05/21 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
2020/06/14 Python
Python实现爬取并分析电商评论
2020/06/19 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
2020/07/21 Python
python exit出错原因整理
2020/08/31 Python
电大自我鉴定范文
2013/10/01 职场文书
工程建设实施方案
2014/03/14 职场文书
项目申请汇报材料
2014/08/16 职场文书
酒店餐厅2014重阳节活动策划方案
2014/09/16 职场文书
爱国主义教育主题班会
2015/08/13 职场文书
如何写一份成功的商业计划书
2019/06/25 职场文书
告诉你创业计划书的8个实用技巧
2019/07/12 职场文书
七年级作文之我的梦想
2019/10/16 职场文书
oracle表分区的概念及操作
2021/04/24 Oracle