2012-04-03 44 views
4

我正在尝试从发送数据时使用“Transfer-Encoding:chunked”读取POST数据,但在发送完所有数据后才能触发脚本已经收到,是否有可能让PHP能够对分块请求做出反应?在PHP中读取“chunked”POST数据

在Apache中使用PHP 5.3.8。

+1

这是Apache的功能,而不是PHP。简短的回答是“不”。无论你在做什么,你可能会在[Node.js](http://nodejs.org/) – DaveRandom 2012-04-03 10:29:36

+0

@DaveRandom之类的东西中获得更多成功:请将其作为答案发布。那么您是说Apache在请求转发到PHP之前会保留请求,直到它完成为止?我能得到长的答案吗? – nortron 2012-04-03 17:45:55

回答

4

当前的Apache API不能在请求被完全接收之前调用响应处理程序。任何模块(mod_php,mod_cgi等)都不可能开始处理和响应请求,直到handler phase,并且他的Apache核心没有达到该阶段,直到请求已被完全接收并且初步处理/解析检查具有完成。

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

你究竟想要做什么?你想要传递什么内容?你有控制连接的两端吗?

+0

伟大的信息,谢谢。我正在努力加速将录制的音频从移动电话传送到语音识别API,这两者都由我控制。我希望语音识别方在麦克风发送后立即开始接收和处理数据,而不是等待完整的录音完成。任何建议? – nortron 2012-04-04 02:26:01

+1

而不是坚持一个HTTP请求,也许你可以在不同的请求中分割流?例如,您可以在电话上缓存几KB的音频数据,并使用例如电话号码将其发送到服务器。一个包含呼叫唯一ID的cookie值。然后,服务器可以使用此ID以块的形式处理消息,并将其重新放回到服务器端。这种方法还具有可能能够在服务器上一次处理多个块的优点。但它会更复杂 - 即跟踪多个并发流。 – DaveRandom 2012-04-04 09:50:52