探讨:关闭浏览器后,php脚本会不会继续运行

 更新时间:2013年06月08日 15:50:50   作者:  
本篇文章是对关闭浏览器后,php脚本会不会继续运行进行了详细的分析介绍,需要的朋友参考下

关闭浏览器后,php脚本会不会继续运行

这个问题需要理解PHP的"连接处理"机制
在 PHP 内部,系统维护着连接状态,其状态有三种可能的情况:
* 0 - NORMAL(正常)
* 1 - ABORTED(异常退出)
* 2 - TIMEOUT(超时)

当 PHP 脚本正常地运行 NORMAL 状态时,连接为有效。
当远程客户端中断连接时,ABORTED 状态的标记将会被打开。远程客户端连接的中断通常是由用户点击 STOP 按钮导致的。
当连接时间超过 PHP 的时限(请参阅 set_time_limit() 函数)时,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。

相关文章

  • C# 获取进程退出代码的实现示例

    C# 获取进程退出代码的实现示例

    这篇文章主要介绍了C# 获取进程退出代码的实现示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • C#实现文本文件读写方法汇总

    C#实现文本文件读写方法汇总

    本文给大家汇总介绍了C#实现文本文件读写的方法,十分的简单实用,有需要的小伙伴可以参考下。
    2015-06-06
  • C# 输出参数out问题

    C# 输出参数out问题

    这篇文章主要介绍了C# 输出参数out问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • C#实现餐饮管理系统

    C#实现餐饮管理系统

    这篇文章主要为大家详细介绍了C#实现餐饮管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • C#实现日期时间的格式化输出的示例详解

    C#实现日期时间的格式化输出的示例详解

    这篇文章主要为大家详细介绍了C#实现日期时间的格式化输出的相关资料,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下
    2023-03-03
  • C#简单快速的json组件fastJSON使用介绍

    C#简单快速的json组件fastJSON使用介绍

    JSON数据格式简洁,用于数据的持久化和对象传输很实用。最近在做一个Razor代码生成器,需要把数据库的表和列的信息修改后保存下来,想到用JSON序列化对象并保存,需要时再反序列化成对象会简单一些
    2012-11-11
  • c# asp .net 动态创建sql数据库表的方法

    c# asp .net 动态创建sql数据库表的方法

    c# asp .net 动态创建sql数据库表的方法,需要的朋友可以参考一下
    2013-04-04
  • C# wpf Brush转Hex字符串的实例代码

    C# wpf Brush转Hex字符串的实例代码

    这篇文章主要介绍了C# wpf Brush转Hex字符串的实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • c#linq里的Skip和Take实现分页或遍历

    c#linq里的Skip和Take实现分页或遍历

    LINQ的优势在于它提供了一种直观、类型安全的方式来操作各种类型的数据,查询常需要获取一部分数据,为了实现这一功能,LINQ提供了Take 和Skip运算符,Take运算符用于从一个序列中返回指定个数的元素,Skip运算符用于从一个序列中跳过指定个数的元素
    2024-01-01
  • js事件模型与自定义事件实例解析

    js事件模型与自定义事件实例解析

    JavaScript一个最简单的事件模型,需要有事件绑定与触发,还有事件删除。本文将对其具体实现代码进行解析,需要的朋友一起来看下吧
    2016-12-12

最新评论