Aktualizacja:Jak przekazać dane POST do PHP-CGI?
W przypływie desperacji, zrobiłem następujące w powłoce:
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
... i nadal nie ma $_POST
zmienne są wyświetlane na wyjściu to:
<?php var_dump($_POST); ?>
próbuję stworzyć mały serwer WWW, który łączy się z php-cgi
plik binarny. Jednak sprawy nie idą tak dobrze. Binarny plik php-cgi
poprawnie obsługuje żądania GET. Jeśli chodzi o żądania POST, tablica $_POST
jest pusta, nawet gdy rzeczy otrzymują POSTed.
Sprawdziłem, czy nagłówki HTTP podawane do pliku binarnego php-cgi
rzeczywiście zawierają dane POST i nagłówek Content-type: application/x-www-form-urlencoded
.
Co może być zachowaniem pliku binarnego php-cgi
, widząc, że w zapytaniu znajdują się dane POST?
Robię postępy, jakie wykopano kilka rzeczy z PHP source code:
-
468: static int sapi_cgi_read_post(char *buffer, uint count_bytes TSRMLS_DC)
(. Nie mam pojęcia, gdzie ta funkcja jest wywoływana z)
Po przeczytaniu odpowiedź poniżej, próbowałem:
<?php
var_dump($HTTP_RAW_POST_DATA);
?>
... co dało wynik:
NULL
... wskazując, że działa tutaj coś jeszcze dziwniejszego.
jestem coraz bliżej ... Znalazłem tę funkcję w /main/php_content_types.c:
SAPI_API SAPI_POST_READER_FUNC (php_default_post_reader)
... i wydaje się, że kod, który przetwarza żądania POST.
Czas na wybranie źródła PHP: P –
Nie mam odpowiedzi, ale dane POST powinny przychodzić za pośrednictwem standardowego wejścia. –
Czy twój serwer sieciowy poprawnie implementuje specyfikację CGI 1.1? – joschi