Aggiornamento:Come passare i dati POST al PHP-CGI?
In un impeto di disperazione, ho fatto quanto segue in una shell:
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
... e ancora nessuna $_POST
variabili vengono visualizzati in uscita di questo:
<?php var_dump($_POST); ?>
sto cercando di creare un piccolo webserver che si interfaccia con il php-cgi
binario. Tuttavia, le cose non stanno andando così bene. Il binario php-cgi
gestisce correttamente le richieste GET. Quando si tratta di richieste POST, l'array $_POST
è vuoto, anche quando le cose vengono sottoposte a POST.
Ho controllato le intestazioni HTTP inserite nel binario php-cgi
e comprendono effettivamente i dati POST e l'intestazione Content-type: application/x-www-form-urlencoded
.
Che cosa potrebbe impedire al binario php-cgi
di vedere che nella richiesta sono inclusi i dati POST?
sto facendo progressi, ho scavato un po 'di roba da PHP source code:
-
468: static int sapi_cgi_read_post(char *buffer, uint count_bytes TSRMLS_DC)
(. Ho idea dove questa funzione viene richiamata da)
Dopo aver letto la risposta qui sotto, ho provato:
<?php
var_dump($HTTP_RAW_POST_DATA);
?>
... che ha prodotto l'uscita:
NULL
... indicando che qualcosa di ancora più strano è al lavoro qui.
Mi sto avvicinando ... Ho trovato questa funzione in /main/php_content_types.c:
SAPI_API SAPI_POST_READER_FUNC (php_default_post_reader)
... e sembra essere il codice che elabora le richieste POST.
È ora di scegliere la sorgente PHP: P –
Non ho una risposta, ma i dati POST dovrebbero essere inviati tramite stdin. –
Il server Web implementa correttamente la specifica CGI 1.1? – joschi