在 PHP 中读取“分块”的 POST 数据

Posted

技术标签:

【中文标题】在 PHP 中读取“分块”的 POST 数据【英文标题】:Reading "chunked" POST data in PHP 【发布时间】:2012-04-16 23:51:07 【问题描述】:

我正在尝试从带有“Transfer-Encoding: chunked”的请求中读取 POST 数据,但在收到所有数据后才能触发脚本,是否可以让 php 能够在分块请求通过时对其做出反应?

在 Apache 中使用 PHP 5.3.8。

【问题讨论】:

这是 Apache 的函数,不是 PHP 的。简短的回答是“不”。不管你在做什么,你可能会在Node.js这样的事情上取得更大的成功 @DaveRandom:请将其发布为答案。所以你是说Apache在转发到PHP之前一直保留请求直到它完成?我能得到长答案吗? 【参考方案1】:

当前的 Apache API 不提供在完全接收到请求之前调用响应处理程序的能力。在handler phase 之前,任何模块(mod_phpmod_cgi 等)都不可能开始处理和响应请求,并且 Apache 核心直到完全接收到请求后才到达此阶段,并且初步处理/解析检查已完成。

将分块流作为请求发送是不常见的,通常这样的事情是响应。 HTTP 是一种主要为一对多内容交付而设计的协议——HTTP 服务器期望将内容提供给许多客户端,而不是让许多客户端向其提供内容。通常要实现这一点,您将在服务器上调用一个脚本,该脚本将连接到远程流(作为请求者)。

你到底想做什么?你想传递什么内容?您可以控制连接的两端吗?

【讨论】:

很好的信息,谢谢。我正在尝试加快将录制的音频从手机传输到我控制的语音识别 API。我想让语音识别端在麦克风传送数据后立即开始接收和处理数据,而不是等待完整的录音完成。有什么建议吗? 与其坚持单个 HTTP 请求,也许您可​​以将流拆分为单独的请求?例如,您可以在手机上缓存几 KB 的音频数据,然后将其发送到服务器,例如包含呼叫的唯一 ID 的 cookie 值。然后服务器可以使用这个 id 将消息分块处理,并在服务器端重新组合在一起。这种方法还具有潜在地能够在服务器上一次处理多个块的优点。但它会更复杂 - 即跟踪多个并发流。

以上是关于在 PHP 中读取“分块”的 POST 数据的主要内容,如果未能解决你的问题,请参考以下文章

是否有从 wpforms 读取 POST 数据的特定方法?

创建一个for循环以分块读取大数据并创建新列

WinINET 和 PHP php://input POST 读取

分块读取csv文件进行处理

php中$_POST接收不到参数问题

php 无法读取 http post 请求正文