2012-04-03 10 views
4

Ich versuche, die POST-Daten von einer Anfrage mit "Transfer-Encoding: Chunked" zu lesen, während es gesendet wird, aber das Skript erst nach allen Daten auslösen kann wurde empfangen, ist es möglich, PHP in die Lage zu versetzen, auf eine Chunked-Anfrage zu reagieren, während es durchkommt?Lesen von "chunked" POST-Daten in PHP

Verwenden von PHP 5.3.8 mit Apache.

+1

Dies ist eine Funktion von Apache, nicht PHP. Und die kurze Antwort ist "Nein". Was auch immer Sie tun, Sie werden wahrscheinlich mehr Erfolg haben in [Node.js] (http://nodejs.org/) – DaveRandom

+0

@DaveRandom: Bitte posten Sie das als Antwort. Sie sagen also, Apache hält die Anfrage aufrecht, bis sie abgeschlossen ist, bevor sie an PHP weitergeleitet wird? Kann ich die lange Antwort bekommen? – nortron

Antwort

4

Die aktuelle Apache-API bietet nicht die Möglichkeit, einen Antworthandler aufzurufen, bevor die Anforderung vollständig empfangen wurde. Es ist nicht möglich, dass ein Modul (mod_php, usw.) mit der Verarbeitung beginnt und auf die Anforderung reagiert, bis die handler phase, und der Apache-Kern erreicht diese Phase erst, nachdem die Anforderung vollständig empfangen wurde und vorbereitende Verarbeitungs-/Parsing-Prüfungen vorliegen abgeschlossen.

Es ist ungewöhnlich, einen Chunked Stream als Anfrage zu senden, normalerweise ist so etwas wie eine Antwort. HTTP ist ein Protokoll, das in erster Linie für die Übertragung von Inhalten von einem auf den anderen Zweck entwickelt wurde. Ein HTTP-Server erwartet, dass er viele Clients mit Serverinhalten versorgt, anstatt viele Clients Inhalte an diesen zu übermitteln. Um dies zu erreichen, rufen Sie normalerweise ein Skript auf dem Server auf, der eine Verbindung zum Remote-Stream herstellt (sei der Anforderer).

Was genau versuchen Sie zu tun? Welchen Inhalt versuchst du zu liefern? Haben Sie Kontrolle über beide Enden der Verbindung?

+0

Großartige Informationen, danke. Ich versuche, die Übertragung von aufgezeichneten Audiodaten von einem Mobiltelefon zu einer Spracherkennungs-API zu beschleunigen, die beide von mir gesteuert werden. Ich möchte, dass die Spracherkennungsseite beginnt, Daten zu empfangen und zu verarbeiten, sobald das Mikrofon sie liefert, anstatt auf die vollständige Aufnahme zu warten. Irgendwelche Empfehlungen? – nortron

+1

Anstatt sich an eine einzelne HTTP-Anfrage zu halten, könnten Sie den Stream vielleicht in separate Anfragen aufteilen? Sie können beispielsweise einige KB Audiodaten auf dem Telefon zwischenspeichern und sie an den Server mit z. ein Cookie-Wert, der eine eindeutige ID für den Anruf enthält. Dann kann der Server diese ID verwenden, um die Nachricht in Blöcken zu verarbeiten und auf der Serverseite wieder zusammenzusetzen. Dieser Ansatz hätte auch den Vorteil, dass mehr als ein Chunk gleichzeitig auf dem Server verarbeitet werden könnte. Es wäre jedoch komplizierter, nämlich mehrere gleichzeitige Ströme zu verfolgen. – DaveRandom