php - PHP:关闭与客户端的连接而不缓冲
问题描述
多次询问,通常的反应是使用缓冲和 HTTP“连接:关闭”和“内容长度”标头:
问题是这有几个缺点:
- 较大的输出(大于输出缓冲区)失败
- 实际关闭连接取决于浏览器(这也可能会产生安全风险,因为 PHP 无论如何都会发送任何数据,即使发送了“Connection: close”标头)
- 它使网站变慢(即使输出尚未完成,客户端也可以开始渲染,通过输出缓冲,您必须生成整个输出,然后才能开始将其发送到客户端 - 所以不是生成输出并将其发送到并行,只能在生成后开始发送)
- 它为后续请求强制单独连接
- 它搞砸了压缩
通过 system() 调用 php 来分叉后台进程是低效的,因为所有事情(数据库连接、数据加载等)都必须重复。
有没有办法关闭连接并在不缓冲的情况下继续运行?
在文档中它写道:
自 [PHP] 4.1 以来,在保持 php 脚本运行的同时关闭用户浏览器连接一直是一个问题,当时修改了 register_shutdown_function() 的行为,使其不会自动关闭用户连接。
我也使用 register_shutdown_function() - 是否可以在关闭功能中关闭连接?
解决方案
推荐阅读
- regex - Perl/Sed 命令多次替换相同的模式
- excel - Excel VBA - 在 VBA 函数中使用命名范围作为参数
- css - RotateX 停止并隐藏溢出
- c# - JSON.NET 中的内部节点遇到意外字符
- javascript - camaro@3.0.15 安装脚本失败
- python-3.x - 如何在python中将数据框和一些数据写入excel文件?
- visual-studio - Visual Studio 2017 中 F# 的代码分析
- spring - 如何在 Spring Batch 中创建动态步骤
- kentico - 为什么集成总线连接器不点火?
- php - 使用php创建短代码以将html打开和关闭标签添加到字符串的方法