【问题标题】:How to stop a PHP function called in a closed browser tab?如何停止在关闭的浏览器选项卡中调用的 PHP 函数?
【发布时间】:2014-02-19 23:27:45
【问题描述】:

我有一个 PHP 代码递归解析网站,并将必要的信息保存到数据库中。

我当前的函数即将解析 500 页。但是,我注意到开始“爬行”后出现错误。现在我需要停下来,清空数据库并再次调用该函数。

但功能并没有停止 :D

我关闭了标签,我尝试从另一个标签调用exit("");,但是这个怪物不会停止!

我在 localhost 中使用 WAMPServer,是否有助于停止所有服务并重新启动?它会继续爬行,还是在我重新启动 Apache 时一切都停止?

【问题讨论】:

  • @Linblow 太棒了!所以这目前是错误的,我应该在我的脚本中使它成为真的,对吧? 编辑: 它不起作用:/
  • ignore_user_abort 用于命令行处理,默认是在终端丢失时中止,所以这里没有帮助。
  • 你不应该首先从网页开始这样的任务。这是一项长期运行的任务,与回答 Web 请求无关。它应该从命令行手动启动,或者作为守护进程或队列工作者的一部分。无论哪种情况,您都可以使用任务管理器将其停止,就像您计算机上的任何其他进程一样。
  • @DigitalChris 它不仅用于命令行处理。 CengizFrostclaw 这是 PHP 中的一种错误。您需要将内容发送到输出缓冲区并在循环中清除它以获得预期的行为。试试这个代码pastebin.com/ZRixXC6i 例如将它粘贴到 test.php 中。在选项卡中运行脚本 test.php,然后在同一目录的新选项卡中打开 counter.txt。不断刷新counter.txt,你会看到无论脚本test.php是否被中止,它都会不断增加。然后将 ignore_user_abort 设置为 false 重试。这一次,一旦中止,它将停止递增。

标签: php apache localhost exit wampserver


【解决方案1】:

到你的任务管理器中停止 php 进程,它会停止脚本,或者尝试在 wamp 面板上停止 apache 服务。

【讨论】:

    【解决方案2】:

    您可以使用ignore_user_abort 和/或connection_status

    在这两种情况下,您都需要向输出发送一些内容,以便这些功能正常工作。

    示例 1:http://pastebin.com/kb9mu2pt

    示例 2:http://pastebin.com/nbhXZNGa

    要回到您的问题,您可以使用ignore_user_abort 并将其设置为false。在解析页面的循环中:您需要添加 3 条指令以将内容写入/发送到输出,以便函数正常工作(参见示例)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-01
      • 2022-06-27
      • 2015-12-27
      • 2022-11-04
      • 1970-01-01
      • 2018-12-09
      • 1970-01-01
      • 2018-08-24
      相关资源
      最近更新 更多