Re: Re: POST superglobal is empty [RESOLVED]
| From: | AJL | Date: | Sun, 08 Aug 2004 03:21:45 +0000 |
| Subject: | Re: Re: POST superglobal is empty [RESOLVED] | ||
| References: | 1 2 3 4 5 6 7 8 9 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-193115@lists.php.net to get a copy of this message | ||
Hi All,
I finally found the problem: It was the mod_bandwidth module in
Apache. I was tipped off to this from bug report:
http://bugs.php.net/bug.php?id=16595
I disabled the module (commented the LoadModule and AddModule lines in
httpd.conf) and $_POST is populated as expected now.
The faq for mod_bandwidth at:
http://www.cohprog.com/v3/bandwidth/faq-en.html
indicates that if configured incorrectly, CGI may stop working.
FYI: Regarding my other questions:
The code below shows an example of reading data from stdin. If POST
data is read properly by php, there will be nothing on stdin.
However, if you set post_max_size to a (very) small value, there will
be something on stdin and the code below will read and display it.
You will also get a warning that CONTENT_LENGTH is greater than
post_max_size. The code compares the values of CONTENT_LENGTH and
post_max_size and warns if post_max_size is smaller.
Hope this helps all of you out there who are having similar problems.
--
Andy
On Thu, Aug 05, 2004 at 03:47:35PM -0500, AJL wrote:
> I tried the C code below and I get post data from Apache fine.
>
> Now I tried to test that php gets data on stdin and that appears to
> fail. Maybe I tested wrong, can anyone verify if this test should
> work?
>
> Step 1: Set 'post_max_size = 1' in php.ini
>
> Step 2: Send html form post to this code:
> <?php
> if($_ENV['REQUEST_METHOD'] == 'POST')
> {
> if (strcasecmp($_ENV['REQUEST_METHOD'], 'POST') == 0)
> {
> $cl = $_ENV['CONTENT_LENGTH'];
> $stdin = fopen('php://stdin', 'r');
> if(!$stdin) {print('Error opening stdin'); exit(1);}
> $raw_data = fgets($stdin, $cl);
> fclose($stdin);
> print("STDIN<br>STRLEN = ".strlen($raw_data));
> print('<pre>');
> print($raw_data);
> print('</pre>');
> }
> }
> print('<hr>ENV<pre>');
> print_r($_ENV);
> print('</pre>');
> ?>
>
>
> ENV variables all look correct. stdin ($raw_data) appears to be
> empty, strlen returns 0. The CONTENT_LENGTH environment variable is
> reported correctly and changes according to how much data is posted.
>
> Is fopen('php://stdin', 'r'); the correct way to read from stdin?
>
> Are there any other ways to read from stdin?
>
> Is post_max_size = 1 a valid setting?
>
> --
> Andy
>
>
> On Wed, Aug 04, 2004 at 11:18:26PM -0500, AJL wrote:
> >
> > Yeah, I would expect a 50x response for a Deny from all. I tried
> > adding the Limit directive to .htacces in both the cgi directory and
> > the www directory, no luck:
> > <Limit POST>
> > Order Allow,Deny
> > Allow from all
> > </Limit>
> >
> > I found this C code:
> >
> > ftp://ftp.ncsa.uiuc.edu/Web/httpd/Unix/ncsa_httpd/cgi/cgi-src/post-query.c
> >
> > and compiled it and redirected my sample code (posted earlier) and I
> > get the posted form variables fine. So maybe Apache CGI setup is
> > working okay.
> >
> > The next logical step seems to be to see what php is getting on stdin
> > and what environment variables are set. I know I can check the
> > environment variables with $_ENV. Anyone know how I can get an exact
> > copy of the data that was passed on stdin?
> >
> > --
> > Andy
> >
> > On Thu, Aug 05, 2004 at 03:20:23AM +0000, Curt Zirzow wrote:
> > > * Thus wrote AJL:
> > > > On Wed, Aug 04, 2004 at 02:55:16PM -0700, Justin Patrin wrote:
> > > > >
> > > > > Sounds like Apache just isn't passing in POST data. Are you *sure*
> > > > > there's Apache directive for this?
> > > > Yeah, that's what I'm thinking more and more, apache not passing it in
> > > > or in a way that php is not understanding.
> > > >
> > > > Anyone know of possible apache settings/directives that affect how CGI
> > > > programs are invoked and/or how data is passed to them?
> > >
> > > <Location /cgi-bin> # or similar
> > > <Limit POST>
> > > Order deny,allow
> > > Deny from all
> > > </Limit>
> > > </Location>
> > >
> > > But, you technically should get a 50x error with that.
> > >
> > >
> > > Curt
> > > --
> > > First, let me assure you that this is not one of those shady pyramid schemes
> > > you've been hearing about. No, sir. Our model is the trapezoid!
> > >
> > > --
> > > PHP General Mailing List (http://www.php.net/)
> > > To unsubscribe, visit: http://www.php.net/unsub.php
> >
> > --
> > PHP General Mailing List (http://www.php.net/)
> > To unsubscribe, visit: http://www.php.net/unsub.php
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php