Update:Wie übergeben Sie POST-Daten an die PHP-CGI?
In einem Anfall von Verzweiflung habe ich folgend in einer Schale:
REDIRECT_STATUS=true
SCRIPT_FILENAME=/var/www/...
REQUEST_METHOD=POST
GATEWAY_INTERFACE=CGI/1.1
export REDIRECT_STATUS
export SCRIPT_FILENAME
export REQUEST_METHOD
export GATEWAY_INTERFACE
echo "test=1" | php-cgi
... und noch keine $_POST
Variablen zeigen in der Ausgabe von auf dem Punkt:
<?php var_dump($_POST); ?>
ich versuche, einen kleinen Webserver zu erstellen, die mit demSchnittstellenbinär. Allerdings läuft es nicht so gut. Die php-cgi
-Binärdatei verarbeitet GET-Anforderungen korrekt. Wenn es um POST-Anfragen geht, ist das Array $_POST
leer, selbst wenn Dinge POST werden.
Ich habe überprüft, die HTTP-Header in die php-cgi
Binärdatei und sie sind in der Tat enthalten die POST-Daten und die Content-type: application/x-www-form-urlencoded
-Header.
Was könnte die Binärdatei php-cgi
davon abhalten zu sehen, dass POST-Daten in der Anfrage enthalten sind?
ich Fortschritte machen, ich habe ein paar Sachen aus dem PHP source code ausgegraben:
-
468: static int sapi_cgi_read_post(char *buffer, uint count_bytes TSRMLS_DC)
(. Ich habe keine Ahnung, wo diese Funktion aufgerufen wird)
Nach der Antwort unten zu lesen, habe ich versucht:
<?php
var_dump($HTTP_RAW_POST_DATA);
?>
..., die die Ausgabe ergab:
NULL
... was darauf hindeutet, dass hier noch etwas Fremder am Werk ist.
Ich bin immer näher ... Ich fand diese Funktion in /main/php_content_types.c:
SAPI_API SAPI_POST_READER_FUNC (php_default_post_reader)
... und es scheint, den Code zu sein, dass verarbeitet POST-Anfragen.
Zeit zur Auswahl durch die PHP-Quelle: P –
Ich habe keine Antwort, aber POST-Daten sollten über STDIN kommen. –
Implementiert Ihr Webserver die CGI 1.1-Spezifikation korrekt? – joschi