Kann nicht HTTP PUT Daten in webservice Code zugreifen
-
02-07-2019 - |
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
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 auchfile, 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');