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

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to