Frage

Alle,

Im Rahmen einer Anwendung Ich schreibe ich brauche einen HTTP PUT Webservice haben, die eingehenden Bilddaten akzeptiert, das wird analysiert, validiert und zu einer lokalen Datei zu speichern.

Meine Frage stellt sich nach der Größe Validierung als die

  

$_SERVER['CONTENT_LENGTH']

hat einen> 0 Wert, und dieser Wert ist auf die Testdateigröße identisch, so kann ich davon ausgehen, dass alles gut geht bis zu diesem Punkt und , wenn ich versuche, die eingehenden Stream-Daten zu lesen mit

  

file_get_contents('php://stdin');

Ich erhalte eine leere Zeichenkette. Ich habe auch versucht mit

  

file_get_contents('php://input');

Und das gibt mir das gleiche Ergebnis eines leeren String zurück.

Jede Hilfe, Anregungen oder Richtung wird geschätzt.

NB: Ich bin mit

  • PHP 5.2.6
  • Apache 2.0
War es hilfreich?

Lösung

Meine beste Vermutung ist, dass Sie httpd.conf ändern müssen, nicht zu PUT-Anfragen zu verweigern. Haben Sie das überprüft?

Andere Tipps

Apache HTTPD leugnet Anfragen standardmäßig PUT. Sie könnten Pakete mod_put check out:
http://perso.ec-lyon.fr/lyonel.vincent/ apache / mod_put.html

und fügen Sie diese httpd.conf:

<Location /upload/dir>
  EnablePut On
  AuthType Basic
  AuthName "Web publishing"
  AuthUserFile /www/etc/passwd
  AuthGroupFile /www/etc/group
  <Limit PUT>
    require valid-user
  </Limit>
</Location>

file_get_contents ersetzt nicht die "r" Parameter - siehe PHP-Handbuch Seite :

string file_get_contents  ( string $filename  [, int $flags...)

Gültige $flag Werte sind FILE_USE_INCLUDE_PATH, FILE_TEXT, FILE_BINARY.

Versuchen Sie, das "r" Flagge zu entfernen und zu versuchen, wieder

Bearbeiten - Frage aktualisiert, "r" Flag so offensichtlich ignoriert wurde nicht die Wurzel des Problems.

Es sieht aus wie es ist ein berichteten Fehler in PHP in Bezug auf file_get_contents Rückkehr eines leere Zeichenfolge für eine HTTP-POST. Aus der Beschreibung des Fehlers:

  

file_get_contents('php://input') (und auch file, fopen+fread) nicht   POST Daten zurückgeben, wenn submited Form mit   enctype = "multipart / form-data".

     

Wenn die gleiche Form ohne enctype submited angegeben (so Standard   "Application / x-www-form-urlencoded" verwendet wird) funktioniert alles OK.

So ist es aussieht wie ein Work-around ist die angegebene Form enctype von multipart/form-data weg zu ändern, was natürlich nicht ideal für einen Bild-Upload ist - von der W3 FORM Spezifikation :

  

Der Inhaltstyp „application / x-www-form-urlencoded“ für das Senden von großen Mengen von binären Daten ineffizient ist oder Text Nicht-ASCII-Zeichen enthalten. Der Inhaltstyp „multipart / form-data“ sollte für die Einreichung der Formulare verwendet werden, die Dateien enthalten, Nicht-ASCII-Daten und binäre Daten.

Weiter Bearbeiten

scheint dieser Fehler in der PHP-Version behoben worden zu sein. Haben Sie sicherstellen überprüft, dass der Puffer mit einem Wagenrücklauf / Zeilenvorschub char startet nicht gelesen werden? Es gibt ein Problem etwas ähnlich wie bei Ihnen, die auf Sitepoint diskutiert wurde.

Versuchen

strlen am Eingang und sehen, was die Länge ist.

Die r Sie als zweite arg haben, ist nicht richtig. file_get_contents nicht die a/r/w/a+/r+/w+ Argumente verwenden, die Anwendungen fopen. Wahrscheinlich wollen Sie es entfernen und nur das tun:

file_get_contents('php://input');

Siehe http://us3.php.net/file_get_contents .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top