【发布时间】:2011-03-11 13:51:30
【问题描述】:
function documentation of ignore_user_abort() 中的注释部分表明,如果没有数据发送到客户端,PHP 无法检测到用户有aborted 的请求。函数connection_status() 也是如此。不幸的是,我需要在使用输出缓冲的页面上检测用户中止(可以取消的 ajax 请求)(我无法轻易更改。)
除了使用该函数之外,还有其他方法可以检测用户中止吗
connection_status()?或者任何使该函数返回正确值的特定方法? PHP 实际上应该知道请求已中止,因为从客户端收到了 FIN 数据包。
我已经尝试分析php://input、php://output、php://stdin和php://stdout的stream metadata在连接被中止之前和之后以阻塞和非阻塞方式读/写数据后,但是没有提供任何有用的状态更改。
【问题讨论】:
-
中止是中止。它中止。中止后你不能做任何事情。
-
恐怕这听起来像是无法满足的要求。至少您必须
ob_get_clean输出缓冲区并传输一些填充字节(空格)。而且我什至不确定即使在 mod_php 下也能可靠地检测到中止的请求。 -
@tomalak - 实际上,你可以!看一下 register_shutdown_function()... 你可以在这里捕获来识别用户中止、超时、正常完成等...并执行一些额外的代码逻辑
-
@MarkBaker:嗯。你打破了我的讽刺回应。
-
@tomalak - 也许......了解 register_shutdown_function() 也可能有助于 OP 考虑解决他的问题的替代方法
标签: php sockets output-buffering