我有大量的数据通过PHP发送到浏览器。如果我一次缓冲并全部发送出去,就会遇到内存问题,因此在整个输出过程中,我一直在定期调用flush()和ob_flush()。
现在,我希望脚本完成输出,关闭连接并运行一些后台进程,但是似乎唯一的方法是如果我事先向浏览器发送标头(“ Content-Length”)(例如作为here中列出的方法)。数据是动态生成的,因此如果不先检查内容长度就无法知道内容的长度,这既缓慢又昂贵。
是否存在一种解决方法或其他方法来关闭浏览器连接,而又不知道总共发送了多少数据?
编辑:问题已解决。对于其他想要像Zane建议的那样不使用php-fpm来解决此问题的人,我将处理代码放在浏览器输出后放入单独的脚本中。通过使用cURL从主脚本调用新脚本并使其立即超时,浏览器不再等待辅助脚本完成处理再终止连接。但是,辅助脚本需要将ignore_user_abort()设置为true。描述为here。