【问题标题】:PHP, Ajax, and the lifespan of the requestPHP、Ajax 和请求的生命周期
【发布时间】:2010-06-08 23:22:03
【问题描述】:

我想知道通过 Ajax 调用 PHP 脚本的生命周期。假设服务器上有一个长时间运行(即 30 秒)的 PHP 脚本,并且该页面是通过 Ajax 加载的。在脚本完成之前,用户关闭浏览器。脚本是否继续运行完成,是否已终止,或者这是服务器本身的功能(我正在运行 Apache fwiw)。感谢您的帮助。

【问题讨论】:

    标签: php jquery http multithreading


    【解决方案1】:

    这可能很有趣:ignore_user_abort()

    ignore_user_abort — 设置客户端断开连接是否应该中止脚本执行

    注意

    在尝试向客户端发送信息之前,PHP 不会检测到用户已中止连接。

    【讨论】:

      【解决方案2】:

      脚本将继续运行。在客户端关闭浏览器并不会通知服务器停止处理请求。

      【讨论】:

      • 谢谢。这就是我所希望的答案。关于我的请求,我可能应该更具体地提出问题。谢谢!
      • -1,因为,嗯,错误。脚本通常会继续运行,因为它没有收到非连接消息/退出,因为 HTTP 中“断开”连接的宽容度相当长,并且作为无状态协议,它只能通过尝试发送来检测数据。大多数基于 Web 的脚本在超时发生之前很久就完成了。注意另一个ignore_user_abort 提到保持脚本运行是否很重要,但即便如此,网络服务器本身也可能决定终止它。
      • 感谢 Wrikken,注意我说“将继续运行”而不是“将继续运行直至完成”。正如您所说的“脚本通常会继续运行”。干杯
      • 问题的字面意思是“脚本是否继续运行到完成”,您回答“将继续运行”,当被调用时,通过声称您没有说“将继续运行到完成”来捍卫答案“?至少答案不是问题的答案,但作为一个不知道它是如何工作并且实际上相信你的答案的人,它会变得具有误导性。无意冒犯,继续做好工作,但显然“它有可能完成”不是 OP 正在寻找的答案。
      【解决方案3】:

      如果您有一个耗时的脚本,那么我建议您将其拆分为多个块。这样会好很多

      【讨论】: