2012-04-03 10 views
4

送信中に「Transfer-Encoding:chunked」というリクエストからPOSTデータを読み込もうとしていますが、すべてのデータが終了するまでスクリプトを起動できません受け取った場合、チャンクされたリクエストにPHPが応答するようにすることは可能でしょうか?PHPでチャンクされたPOSTデータを読む

ApacheでPHP 5.3.8を使用しています。

+1

これはPHPではなく、Apacheの機能です。短い答えは「いいえ」です。あなたがやっていることは、おそらく[Node.js](http://nodejs.org/)のようなものでもっと成功するでしょう。 – DaveRandom

+0

@DaveRandom:答えとして投稿してください。 PHPに転送する前にApacheが要求を完了してから完了するまで、Apacheは要求を保持していると言っていますか?長い答えを得ることはできますか? – nortron

答えて

4

現在のApache APIでは、要求が完全に受信される前に応答ハンドラを呼び出すことはできません。任意のモジュール(mod_phpmod_cgiなど)が処理を開始し、handler phaseまでリクエストに応答することはできません。リクエストが完全に受信され、予備処理/解析チェックが行われるまでApacheコアはこのフェーズに達しません完了しました。

チャンクストリームをリクエストとして送信するのは珍しいですが、通常これは応答です。 HTTPは、主に1対多のコンテンツ配信用に設計されたプロトコルです.HTTPサーバーは、多数のクライアントにコンテンツを配信するのではなく、多くのクライアントにコンテンツを配信することを想定しています。通常これを実現するには、リモートストリーム(リクエスター)に接続するサーバー上のスクリプトを呼び出します。

あなたは正確に何をしようとしていますか?どのようなコンテンツを配信しようとしていますか?接続の両端を制御できますか?

+0

素晴らしい情報、ありがとうございます。私は、携帯電話から音声認識APIに録音されたオーディオの配信をスピードアップしようとしています。どちらも私がコントロールしています。マイクが完全な録音を完了するのを待つのではなく、音声認識側でデータの受信と処理を開始するようにしたいと思います。どんな勧告? – nortron

+1

単一のHTTP要求に固執するのではなく、別の要求でストリームを分割することができますか?たとえば、数KBのオーディオデータを電話にキャッシュし、それをサーバーに送信することができます。コールの一意のIDを含むCookie値。その後、サーバーはこのIDを使用してメッセージをチャンクで処理し、サーバー側で再び一緒に戻すことができます。このアプローチは、潜在的にサーバー上で一度に複数のチャンクを処理できるという利点もあります。それはもっと複雑です - つまり、複数の並行ストリームを追跡することです。 – DaveRandom

関連する問題