此查询解决了在完成 PHP 脚本之前关闭连接的挑战。目标是通过 AJAX 启动一个冗长的过程,但返回一个指示其开始的响应,而不等待 PHP 脚本完成。
根据 PHP 手册,终止 TCP 连接而不结束 PHP 脚本涉及到更多只是发送一个“关闭”标头。用户注释#71172(2006 年 11 月)提供了一个全面的解决方案:
<?php ob_end_clean(); header("Connection: close"); ignore_user_abort(true); ob_start(); echo('Text the user will see'); $size = ob_get_length(); header("Content-Length: $size"); ob_end_flush(); flush(); // Do processing here sleep(30); echo('Text user will never see'); ?>
要使该解决方案发挥作用,禁用输出缓冲、清除缓冲区,然后发送标头信息至关重要。虽然发送“close”标头是必要的,但立即关闭连接还不够。
后续用户注释#89177(2009 年 2 月)和#93441(2009 年 9 月)提供了有关连接处理和连接的更多见解。帮助阐明 PHP 中早期连接关闭的细微差别。
以上是如何在通过 AJAX 启动长时间运行的进程后提前关闭 PHP 连接?的详细内容。更多信息请关注PHP中文网其他相关文章!