7
votes

Comment passer des données post-up sur le PHP-CGI?

mise à jour: strong>

dans un ajustement de désespoir, j'ai fait ce qui suit dans une coquille: p> xxx pré>

... et toujours non $ _ POST CODE> Les variables se présentent dans la sortie de ceci: p> xxx pré>


J'essaie de créer un petit serveur Web qui interface avec le php-cgi code> binaire. Cependant, les choses ne vont pas si bien. Le php-cgi code> binaire correctement gère des demandes. Lorsqu'il s'agit de poster des demandes, le tableau $ £ _ POST CODE> est vide, même lorsque les choses sont postées. P>

J'ai vérifié les en-têtes HTTP introduisés dans le PHP -cgi code> binaire et ils incluent effectivement les données post et le type type de contenu: application / x-www-form-urlencoded code> en-tête. p>

Qu'est-ce qui pourrait conserver le binaire php-cgi code> de voir qu'il y a des données postales incluses dans la demande? p>


Je fais des progrès, j'ai creusé des choses de la code source PHP : p>

  • / sapi / cgi / cgi_main .c : p>

    468: statique int sapi_cgi_read_post (char * tampon, uint comptage_bytes tsrmls_dc) code> p> blockQuote> li> ul>

    (Je n'ai aucune idée de l'envoi de cette fonction.) p>


    Après avoir lu la réponse ci-dessous, j'ai essayé: P>

    NULL
    


4 commentaires

Il est temps de choisir la source PHP: p


Je n'ai pas de réponse, mais les données postales devraient entrer via STDIN.


Votre serveur Web met-elle correctement implémenter la spécification CGI 1.1?


@joschi: Je crois que ... plus cela fonctionne bien pour obtenir des demandes, donc je suppose que c'est autre chose.


3 Réponses :


0
votes

Essayez de vérifier la variable $ http_raw_post_data.

http://php.net/manual/fr/Reserved.variables. HTTPRAWPOSTDATA.PHP


2 commentaires

Il arrive comme null . Pourquoi est-ce que ça fait ça?


Parce que http_raw_post_data est une solution terrible - File_Get_Contents ("PHP: // Entrée") est meilleur, mais ne fonctionnera pas avec des données codées par MultiPart / Form-Data.



8
votes

i enfin le figuré:

Apparemment la variable d'environnement content_length doit être défini.

Ajout: < Pré> xxx

à mon exemple ci-dessus la fait fonctionner correctement!


2 commentaires

Vous devez également définir probablement le type de contenu au minimum - fondamentalement, tout ce que vous essayiez de faire du tuyau dans STDIN dans votre version précédente du script de shell doit être défini comme une variable d'environnement avant la démarrage de la CGI. Oh, et vous devriez marquer cette réponse comme "acceptée" :)


@TML: true - j'ai ajouté "type de contenu" maintenant que cela fonctionne. Je ne peux pas accepter cela avant 24 heures après que je le pose. (IIRC)



4
votes

Vous avez mentionné que votre système est bien compris. La longueur du contenu doit uniquement être définie pour les messages

aussi cela pourrait aider, c'est la spécification CGI / 1.1. Il montre les variables d'environnement doivent être définies:

http://graphcomp.com/info/specs/cgi11.html et Ce lib.ru/webmaster/cgi1_1Spec/interface.html

Quelles étaient les variables d'environnement minimum dont vous aviez besoin pour obtenir des demandes de travail?


3 commentaires

Script_filename, demande_method et redirect_status.


Redirect_Status n'est pas requis si vous avez cgi.force_redirect = 0 dans votre php.ini. J'ai essayé d'ajouter ça et script_filename et il ne fonctionnera toujours pas


Content_type pour moi, PHP 7.0.16