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