【问题标题】:Can PHP tell when the browser goes away?PHP 可以判断浏览器何时消失吗?
【发布时间】:2009-07-04 18:39:34
【问题描述】:

如果我正在生成要发送到浏览器的数据流,并且用户关闭了浏览器,我是否可以在 PHP 中告知我不需要费心生成或发送流的其余部分?我想在这个循环中插入一些东西:

while (!feof($pipes[1])) {
   echo fgets($pipes[1]);
}

我的后备计划是让浏览器使用 JavaScript onunload 来访问另一个 PHP 页面以终止生成数据的进程,但如果 PHP 能够判断我何时无处回显,那就更清楚了。

【问题讨论】:

    标签: php


    【解决方案1】:

    默认情况下,如果用户离开,PHP 将中止脚本。但是,有时您不希望这种情况发生,因此 php 有一个您设置的配置,称为 ignore_user_abort
    http://php.net/manual/en/misc.configuration.php

    【讨论】:

      【解决方案2】:

      还有一个名为register_shutdown_function() 的函数,据说会在执行停止时执行。我从未真正使用过它,所以我不会保证它的效果如何,但我想我会为了完整性而提及它。

      【讨论】:

      • 关闭,但在这种情况下,他只想停止处理用户中止的数据。
      【解决方案3】:

      我相信脚本在正常加载时会自动中止(无 ajax)。但是,如果您想使用 xmlhttprequest 通过 php 实现某种长轮询,我认为您将不得不使用某种 javascript 来实现,因为 php 无法检测到它。也想知道具体情况。

      【讨论】:

        【解决方案4】:

        这些答案将我引向了我正在寻找的东西。底层进程需要特别注意才能杀死它。我需要跳出循环。再次感谢 Stack Overflow。

         while (!feof($pipes[1]) && !connection_aborted())
         {
          echo fgets($pipes[1]);
         }
        
         if (connection_aborted())
         {
          exec('kill -4 '.$mypid);
         }
        

        【讨论】:

          猜你喜欢
          • 2013-11-07
          • 2011-01-01
          • 2010-09-09
          • 2013-02-09
          • 1970-01-01
          • 2016-12-05
          • 1970-01-01
          • 2014-05-31
          • 1970-01-01
          相关资源
          最近更新 更多