如果我正在生成要发送到浏览器的数据流,并且用户关闭了浏览器,我可以在PHP中告诉我不需要生成或发送剩余的流吗?我想在这个循环中插入一些东西:
while (!feof($pipes[1])) {
echo fgets($pipes[1]);
}
我的后备计划是让浏览器使用JavaScript onunload命中另一个PHP页面来杀死正在生成数据的进程,但如果PHP可以判断我何时无处回应,那么它会更清晰。
答案 0 :(得分:10)
默认情况下,如果用户导航,PHP将中止脚本。但是有些时候你不希望这种情况发生,所以php有你设置的名为ignore_user_abort
的配置
http://php.net/manual/en/misc.configuration.php
答案 1 :(得分:1)
还有一个名为register_shutdown_function()的函数,应该在执行停止时执行。我从来没有真正使用它,所以我不会保证它有多好用,但我想我会提到它的完整性。
答案 2 :(得分:1)
我相信脚本会在正常加载时自动中止(No ajax)。但是,如果你想通过php使用xmlhttprequest实现某种长轮询,我认为你将不得不用某种javascript来做,因为那时php无法检测到它。也想知道确切的情况。
答案 3 :(得分:0)
这些答案指出了我正在寻找的东西。潜在的过程需要特别注意杀死它。我需要跳出循环。再次感谢Stack Overflow。
while (!feof($pipes[1]) && !connection_aborted())
{
echo fgets($pipes[1]);
}
if (connection_aborted())
{
exec('kill -4 '.$mypid);
}