300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 如何用php脚本 判断客户端浏览器是否已经断开连接?

如何用php脚本 判断客户端浏览器是否已经断开连接?

时间:2020-12-31 04:37:19

相关推荐

如何用php脚本 判断客户端浏览器是否已经断开连接?

后端开发|php教程

如何用php脚本 判断客户端浏览器是否已经断开连接?

后端开发-php教程

曾经看到一个人贴:

中国万年历源码,ubuntu定时休眠命令,在tomcat下发布项目,企业爬虫代理,检测记录存在php,南京seo关键词优化费用情况lzw

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

0 – NORMAL(正常)

1 – ABORTED(退出)

2 – TIMEOUT(超时)

screwturn wiki 源码,ubuntu 双显卡版本,tomcat加utf-8,net爬虫教程,开发php是什么,百度seo关键词优化公司有哪些lzw

当 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。

单一地方门户网站源码,vscode改背景配置,ubuntu密码遗忘,tomcat自动加斜杠,爬虫 ai,php 获取手机ip,静海区网络优化seo,图片展示网站带后台源码,仿百度问答模板lzw

但是我测试的结果是,如果后端没有向前端输出的话,比如在一个死循环的While处理中,没有向前端输出内容,那connection_status()永远都是0,根本不知道前端断开了。

回复讨论(解决方案)

对!php 只在执行输出语句时才检查用户连接是否有效

如果想要及时发现,需要修改 php 的内核

但这样做的代价未免也太大了

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。