PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > php.general > How to pass POST data to php-cgi
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
How to pass POST data to php-cgi

Réponse
 
LinkBack Outils de la discussion
Vieux 16/03/2008, 23h30   #1
Hui Chen
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut How to pass POST data to php-cgi

Hi,

I'm writing a simple httpd with php support via cgi/fastcgi. I tried several
ways to pass POST data to php-cgi (by writing to child process's stdin from
parent process), however, none of them worked

Here's the most simple not working example:

$ export CONTENT_LENGTH=4; export HTTP_METHOD=POST; echo 's=33' | php-cgi
test.php

and test.php has only one line:

<?php echo $_POST["s"]; ?>

Running it gave me:

X-Powered-By: PHP/5.2.3-1ubuntu6.3
Content-type: text/html

<br />
<b>Notice</b>: Undefined index: s in <b>/home/chen/temp/test.php</b> on
line <b>1</b><br />

Please me figure out what's missing. Part of php-cgi's phpinfo() output
is attached, I will provide more if you need.

Thanks in advance,
Hui

=========phpinfo() output==========
_SERVER["TERM"]xterm
_SERVER["SHELL"]/bin/bash
_SERVER["SSH_TTY"]/dev/pts/1
_SERVER["CONTENT_LENG"]4
_SERVER["LD_LIBRARY_PATH"]/usr/local/lib
_SERVER["LS_COLORS"]no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do =01;35:bd=40;33;01:cd=40;33;01r=40;31;01:su=37;4 1:sg=30;43:tw=30;42w=34;42:st=37;44:ex=01;32:*.t ar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh =01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31: *.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*. jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.p bm=01;35:*..pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xb m=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png =01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi= 01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;3 5:*..xwd=01;35:*.flac=01;35:*.mp3=01;35:*.mpc=01;3 5:*.ogg=01;35:*.wav=01;35:
_SERVER["LANG"]en_US.UTF-8
_SERVER["HISTCONTROL"]ignoredups
_SERVER["SHLVL"]1
_SERVER["CONTENT_LENGTH"]4
_SERVER["LESSOPEN"]| /usr/bin/lesspipe %s
_SERVER["HTTP_METHOD"]POST
_SERVER["CONTENT_TYPE"]application/x-www-form-urlencoded
_SERVER["LESSCLOSE"]/usr/bin/lesspipe %s %s
_SERVER["_"]/usr/bin/php-cgi
_SERVER["PHP_SELF"]<i>no value</i>
_SERVER["REQUEST_TIME"]1205702297
_SERVER["argv"]</td><td class="v"><pre>Array
(
[0] =&gt; phpinfo.php
)
</pre>

_SERVER["argc"]1
_ENV["TERM"]xterm
_ENV["SHELL"]/bin/bash
_ENV["SSH_TTY"]/dev/pts/1
_ENV["CONTENT_LENG"]4
_ENV["LD_LIBRARY_PATH"]/usr/local/lib
_ENV["LS_COLORS"]no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do =01;35:bd=40;33;01:cd=40;33;01r=40;31;01:su=37;4 1:sg=30;43:tw=30;42w=34;42:st=37;44:ex=01;32:*.t ar=01;31:*.tgz=01;31:*..arj=01;31:*.taz=01;31:*.lz h=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31 :*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:* .jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*. pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xb m=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png =01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi= 01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;3 5:*.xwd=01;35:*.flac=01;35:*.mp3=01;35:*.mpc=01;35 :*.ogg=01;35:*.wav=01;35:
_ENV["LANG"]en_US.UTF-8
_ENV["HISTCONTROL"]ignoredups
_ENV["SHLVL"]1
_ENV["CONTENT_LENGTH"]4
_ENV["LESSOPEN"]| /usr/bin/lesspipe %s
_ENV["HTTP_METHOD"]POST
_ENV["CONTENT_TYPE"]application/x-www-form-urlencoded
_ENV["LESSCLOSE"]/usr/bin/lesspipe %s %s
_ENV["_"]/usr/bin/php-cgi

  Réponse avec citation
Vieux 17/03/2008, 00h48   #2
Hui Chen
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: How to pass POST data to php-cgi

I solved the problem myself.

Following command works:

export CONTENT_LENGTH=4; export REQUEST_METHOD=POST; export SCRIPT_FILENAME=
test.php ; export CONTENT_TYPE=application/x-www-form-urlencoded; echo s=44
| php-cgi

output:

X-Powered-By: PHP/5.2.3-1ubuntu6.3
Content-type: text/html

44

a working C fork/exec example is also attached.

=========== test.c ===========

#include <unistd.h>
#include <stdio.h>
#include <string.h>

main()
{
int outfd[2];
int infd[2];
int oldstdin, oldstdout;
pipe(outfd); // Where the parent is going to write to
pipe(infd); // From where parent is going to read
if(!fork())
{
close(0);
close(1);
dup2(outfd[0], 0); // Make the read end of outfd pipe as stdin
dup2(infd[1],1); // Make the write end of infd as stdout
setenv("CONTENT_LENGTH", "4", 1);
setenv("REQUEST_METHOD", "POST", 1);
setenv("SCRIPT_FILENAME", "test.php", 1);
setenv("CONTENT_TYPE", "application/x-www-form-urlencoded", 1);
execl("/usr/bin/php-cgi","/usr/bin/php-cgi", NULL);
}
else
{

char output[1000];
close(outfd[0]); // These are being used by the child
write(outfd[1],"s=444", 5); // Write to child's stdin
close(outfd[1]);
close(infd[1]);
output[read(infd[0],output,1000)] = 0; // Read from child's stdout
printf("%s", output);
}
}


On Sun, Mar 16, 2008 at 4:30 PM, Hui Chen <usa.chen@gmail.com> wrote:

> Hi,
>
> I'm writing a simple httpd with php support via cgi/fastcgi. I tried
> several ways to pass POST data to php-cgi (by writing to child process's
> stdin from parent process), however, none of them worked
>
> Here's the most simple not working example:
>
> $ export CONTENT_LENGTH=4; export HTTP_METHOD=POST; echo 's=33' | php-cgi
> test.php
>
> and test.php has only one line:
>
> <?php echo $_POST["s"]; ?>
>
> Running it gave me:
>
> X-Powered-By: PHP/5.2.3-1ubuntu6.3
> Content-type: text/html
>
> <br />
> <b>Notice</b>: Undefined index: s in <b>/home/chen/temp/test.php</b> on
> line <b>1</b><br />
>
> Please me figure out what's missing. Part of php-cgi's phpinfo()
> output is attached, I will provide more if you need.
>
> Thanks in advance,
> Hui
>
> =========phpinfo() output==========
> _SERVER["TERM"]xterm
> _SERVER["SHELL"]/bin/bash
> _SERVER["SSH_TTY"]/dev/pts/1
> _SERVER["CONTENT_LENG"]4
> _SERVER["LD_LIBRARY_PATH"]/usr/local/lib
>
> _SERVER["LS_COLORS"]no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do =01;35:bd=40;33;01:cd=40;33;01r=40;31;01:su=37;4 1:sg=30;43:tw=30;42w=34;42:st=37;44:ex=01;32:*.t ar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh =01;31:*.zip=01;31:*.z=01;31:*..Z=01;31:*.gz=01;31 :*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:* .jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*. pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xb m=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png =01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi= 01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;3 5:*.xwd=01;35:*.flac=01;35:*.mp3=01;35:*.mpc=01;35 :*.ogg=01;35:*.wav=01;35:
> _SERVER["LANG"]en_US.UTF-8
> _SERVER["HISTCONTROL"]ignoredups
> _SERVER["SHLVL"]1
> _SERVER["CONTENT_LENGTH"]4
> _SERVER["LESSOPEN"]| /usr/bin/lesspipe %s
> _SERVER["HTTP_METHOD"]POST
> _SERVER["CONTENT_TYPE"]application/x-www-form-urlencoded
> _SERVER["LESSCLOSE"]/usr/bin/lesspipe %s %s
> _SERVER["_"]/usr/bin/php-cgi
> _SERVER["PHP_SELF"]<i>no value</i>
> _SERVER["REQUEST_TIME"]1205702297
> _SERVER["argv"]</td><td class="v"><pre>Array
> (
> [0] =&gt; phpinfo.php
> )
> </pre>
>
> _SERVER["argc"]1
> _ENV["TERM"]xterm
> _ENV["SHELL"]/bin/bash
> _ENV["SSH_TTY"]/dev/pts/1
> _ENV["CONTENT_LENG"]4
> _ENV["LD_LIBRARY_PATH"]/usr/local/lib
>
> _ENV["LS_COLORS"]no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do =01;35:bd=40;33;01:cd=40;33;01r=40;31;01:su=37;4 1:sg=30;43:tw=30;42w=34;42:st=37;44:ex=01;32:*.t ar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh =01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31: *.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*. jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.p bm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm =01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png= 01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=0 1;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35 :*.xwd=01;35:*.flac=01;35:*.mp3=01;35:*.mpc=01;35: *.ogg=01;35:*.wav=01;35:
> _ENV["LANG"]en_US.UTF-8
> _ENV["HISTCONTROL"]ignoredups
> _ENV["SHLVL"]1
> _ENV["CONTENT_LENGTH"]4
> _ENV["LESSOPEN"]| /usr/bin/lesspipe %s
> _ENV["HTTP_METHOD"]POST
> _ENV["CONTENT_TYPE"]application/x-www-form-urlencoded
> _ENV["LESSCLOSE"]/usr/bin/lesspipe %s %s
> _ENV["_"]/usr/bin/php-cgi
>
>


  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 14h04.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,13058 seconds with 10 queries