Mise à jour:Comment transmettre des données POST au PHP-CGI?
Dans une forme de désespoir, je l'ai fait ce qui suit dans une coquille:
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
... et toujours pas de variables $_POST
montrent des signes dans la sortie de celle-ci:
<?php var_dump($_POST); ?>
Je suis en train de créer un petit serveur web qui interface avec le php-cgi
binaire. Cependant, les choses ne vont pas si bien. Le binaire php-cgi
gère correctement les requêtes GET. Lorsqu'il s'agit de requêtes POST, le tableau $_POST
est vide, même lorsque les éléments sont POSTés.
J'ai vérifié les en-têtes HTTP qui sont introduits dans le binaire php-cgi
et ils incluent en effet les données POST et l'en-tête Content-type: application/x-www-form-urlencoded
.
Qu'est-ce qui pourrait empêcher le binaire php-cgi
de voir que les données POST sont incluses dans la requête?
Je fais des progrès, je l'ai déterré quelques trucs du PHP source code:
-
468: static int sapi_cgi_read_post(char *buffer, uint count_bytes TSRMLS_DC)
(. Je ne sais pas où cette fonction est appelée à partir)
Après avoir lu la réponse ci-dessous, j'ai essayé:
<?php
var_dump($HTTP_RAW_POST_DATA);
?>
... qui a abouti à la sortie:
NULL
... indiquant que quelque chose d'encore plus étrange est à l'œuvre ici.
Je reçois plus ... Je trouve cette fonction dans /main/php_content_types.c:
SAPI_API SAPI_POST_READER_FUNC (php_default_post_reader)
... et il semble être le code traite les requêtes POST.
Il est temps de choisir la source PHP: P –
Je n'ai pas de réponse, mais les données POST devraient arriver via stdin. –
Votre serveur Web met-il correctement en œuvre la spécification CGI 1.1? – joschi