热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php浏览器执行自动脚本,关闭正执行的php脚本浏览器后,如何使php脚本转入后台运行...

通常来说,客户端浏览器连接断开后,服务器会中止脚本.不过可以做到连接断开,但是服务器继续执行脚本。可以参考下PHP手册,其中关于连接处理的

通常来说,客户端浏览器连接断开后, 服务器会中止脚本.不过可以做到连接断开,但是服务器继续执行脚本。

可以参考下PHP手册,其中关于连接处理的解释很详细:

在 PHP 内部,系统维护着连接状态,其状态有三种可能的情况:

0 - NORMAL(正常) 1 - ABORTED(异常退出) 2 -

TIMEOUT(超时) 当 PHP 脚本正常地运行 NORMAL

状态时,连接为有效。当远程客户端中断连接时,ABORTED

状态的标记将会被打开。远程客户端连接的中断通常是由用户点击 STOP

按钮导致的。当连接时间超过 PHP 的时限(请参阅

set_time_limit() 函数)时,TIMEOUT

状态的标记将被打开。

可以决定脚本是否需要在客户端中断连接时退出。有时候让脚本完整地运行会带来很多方便,即使没有远程浏览器接受脚本的输出。默认的情况是当远程客户端连接中断时脚本将会退出。该处理过程可由

php.ini 的 ignore_user_abort 或由

httpd.conf 设置中对应的“php_value

ignore_user_abort”以及

ignore_user_abort() 函数来控制。如果没有告诉 PHP

忽略用户的中断,脚本将会被中断,除非通过

register_shutdown_function()

设置了关闭触发函数。通过该关闭触发函数,当远程用户点击 STOP

按钮后,脚本再次尝试输出数据时,PHP

将会检测到连接已被中断,并调用关闭触发函数。

脚本也有可能被内置的脚本计时器中断。默认的超时限制为 30

秒。这个值可以通过设置 php.ini 的

max_execution_time 或 httpd.conf

设置中对应的“php_value

max_execution_time”参数或者

set_time_limit()

函数来更改。当计数器超时的时候,脚本将会类似于以上连接中断的情况退出,先前被注册过的关闭触发函数也将在这时被执行。在该关闭触发函数中,可以通过调用

connection_status()

函数来检查超时是否导致关闭触发函数被调用。如果超时导致了关闭触发函数的调用,该函数将返回

2。

需要注意的一点是 ABORTED 和 TIMEOUT

状态可以同时有效。这在告诉 PHP 忽略用户的退出操作时是可能的。PHP

将仍然注意用户已经中断了连接但脚本仍然在运行的情况。如果到了运行的时间限制,脚本将被退出,设置过的关闭触发函数也将被执行。在这时会发现函数

connection_status() 返回 3。

举例来说:

function outputStringAndCloseConnection2($stringToOutput)

{

set_time_limit(0);

ignore_user_abort(true);

// buffer all upcoming output - make sure we care about compression:

if(!ob_start("ob_gzhandler"))

ob_start();

echo $stringToOutput;

// get the size of the output

$size = ob_get_length();

// send headers to tell the browser to close the connection

header("Content-Length: $size");

header('Connection: close');

// flush all output

ob_end_flush();

ob_flush();

flush();

// close current session

if (session_id()) session_write_close();

}

?>

其中的关键就是这么一句:ignore_user_abort(true);



推荐阅读
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 本文详细介绍了在Windows系统中如何配置Nginx以实现高效的缓存加速功能,包括关键的配置文件设置和示例代码。 ... [详细]
  • 本文详细介绍了在 CentOS 系统中如何创建和管理 SWAP 分区,包括临时创建交换文件、永久性增加交换空间的方法,以及如何手动释放内存缓存。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 使用TabActivity实现Android顶部选项卡功能
    本文介绍如何通过继承TabActivity来创建Android应用中的顶部选项卡。通过简单的步骤,您可以轻松地添加多个选项卡,并实现基本的界面切换功能。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • publicclassBindActionextendsActionSupport{privateStringproString;privateStringcitString; ... [详细]
  • JUnit下的测试和suite
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • Requests库的基本使用方法
    本文介绍了Python中Requests库的基础用法,包括如何安装、GET和POST请求的实现、如何处理Cookies和Headers,以及如何解析JSON响应。相比urllib库,Requests库提供了更为简洁高效的接口来处理HTTP请求。 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 解决PHP项目在服务器无法抓取远程网页内容的问题
    本文探讨了在使用PHP进行后端开发时,遇到的一个常见问题:即在本地环境中能够正常通过CURL获取远程网页内容,但在服务器上却无法实现。我们将分析可能的原因并提供解决方案。 ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
author-avatar
小菜一蝶2502902341
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有