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

4
我想在请求中读取使用“Transfer-Encoding: chunked”发送的POST数据,但无法让脚本在接收到所有数据之前启动。有可能让PHP能够在分块请求通过时立即作出反应吗?
使用Apache和PHP 5.3.8。

1
这是Apache的一个函数,而不是PHP的。简短的回答是“不行”。无论你在做什么,你可能会在像Node.js这样的东西中获得更多的成功。 - DaveRandom
@DaveRandom:请将这个作为答案发布。所以你的意思是Apache在将请求转发给PHP之前会等待请求完成?我可以得到详细的回答吗? - nortron
1个回答

4
目前的Apache API无法在完全接收请求之前调用响应处理程序。任何模块(例如mod_phpmod_cgi等)在处理程序阶段之前都无法开始处理并响应请求,并且Apache核心直到请求完全接收并完成初步处理/解析检查后才会达到此阶段。
将分块流作为请求发送通常是不寻常的,通常情况下像这样的内容是一个响应。HTTP是一个旨在实现一对多内容传递的协议-HTTP服务器期望向许多客户端提供内容,而不是许多客户端向其提供内容。通常,要实现这一点,您将调用服务器上的脚本,该脚本将连接到远程流(成为请求者)。
您究竟想做什么?您试图传递什么内容?您是否控制连接的两端?

非常有用的信息,谢谢。我正在尝试加快从手机到语音识别API的录制音频的传递速度,这两个都在我的控制之下。我希望语音识别方面能够在麦克风传递数据时立即开始接收和处理数据,而不是等待完整的录音完成。有什么建议吗? - nortron
1
与其坚持单个HTTP请求,也许你可以将流分成单独的请求?例如,您可以在手机上缓存几KB的音频数据,并将其与包含呼叫唯一ID的cookie值一起发送到服务器。然后,服务器可以使用此ID以块的形式处理消息,并在服务器端将其重新组合。这种方法还具有可能能够在服务器上同时处理多个块的优点。不过,这会更加复杂 - 即要跟踪多个并发流。 - DaveRandom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接