ID: 9852 Updated by: lobbin Old Summary: Header redirect and db connection cause "CGI misbehaved" Reported By: [EMAIL PROTECTED] Old Status: Feedback Status: Open Bug Type: IIS related Operating System: Windows 2000 Old PHP Version: 4.0.4pl1 PHP Version: 4.1.1
Previous Comments: ------------------------------------------------------------------------ [2002-01-12 06:58:59] [EMAIL PROTECTED] Can you try this with 4.1.1? There been alot of fixes for IIS in the recent versions. ------------------------------------------------------------------------ [2001-03-19 22:41:31] [EMAIL PROTECTED] Under the category of "You Can Never Have Too Much Information On A Bug", here is my experience with the "CGI App Misbehaved" bug (related bug reports: #8571 and #8744). Bug report summary: A PHP script that sends a 'Location' header directive and makes a database connection causes IIS to intermittently return a 'Gateway Error 502' when the client browser asks for the page specified in the redirect. The address bar will correctly show the page that should have loaded when the error is displayed, and pressing F5 (refresh) will correctly load the page. Note that the error is (seemingly) completely random, sometimes you get it, other times the script works correctly. The error message text is: -- Begin -- CGI Error The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are: -- End -- This error depends on: 1) Using PHP in CGI mode (i.e. using php.exe, the ISAPI dll does not seem to produce this error, although it has it's own problems). 2) A PHP script that connects to a database (tested both mssql_connect and odbc_connect) *and* sends a 'Location:' header. If the script redirects to something other than a .php file (i.e. .html or .pdf) or does not connect to the database, the error will not occur. 3) A successful db connection. If the db connect call fails (due to bad password, etc.), the redirect always works. This error does *not* depend on: 1) A fully qualified 'Location' header. The following also fails: header('Location: http://10.0.0.30/test/done.php'); 2) The relative order of the header() and xxx_connect() calls in 'doit.php'. I wouldn't expect the order to affect the result, but I checked it anyway. Interesting note: While upgrading the server to SP1 to see if it had any affect on this bug, I continued to test while it was in the process of performing the upgrade. It was very difficult (I gave up) trying to get the error. The CPU was at 100% due to the upgrade which (obviously) caused the web server performance to suffer. Combined with the fact that it occurs randomly anyway, this suggests that it may have something to do with the timings between the request for doit.php, execution of doit.php, and the request for done.php. Hardware/Software: Web server: Win2000 Server (with and without SP1) IIS 5.0 PHP 4.0.4pl1 (CGI mode) Database server: WinNT 4.0 SP6 MS-SQL 7.0 Client: Win2000 Professional SP1 IE 5.5 SP1 ======================================== Test scripts ======================================== start.php ---------------------------------------- <html><head><title>Test</title></head> <body> <a href="doit.php">Do test</a> </body></html> ---------------------------------------- doit.php ---------------------------------------- <?php // Either connect line will cause the error $conn = mssql_connect('host', 'uid, 'pwd') or die("couldn't connect"); //$conn = odbc_connect('dsn', 'uid', 'pwd') or die("couldn't connect"); header('Location: done.php'); ?> ---------------------------------------- done.php ---------------------------------------- <html><head><title>Test</title></head> <body> Test complete <p><a href="start.php">Reset test</a> </body></html> ======================================== Here are actual HTTP headers recorded using a packet sniffer: ======================================== Scenario #1 - CGI Error Occurs ======================================== Client request ---------------------------------------- GET /test/doit.php HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, */* Referer: http://10.0.0.30/test/start.php Accept-Language: en-us Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) Host: 10.0.0.30 Connection: Keep-Alive ---------------------------------------- Server response ---------------------------------------- HTTP/1.1 302 Object Moved Location: done.php Server: Microsoft-IIS/5.0 Content-Type: text/html Connection: close Content-Length: 131 ---------------------------------------- Client request (automatic IE request) ---------------------------------------- GET /test/done.php HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, */* Referer: http://10.0.0.30/test/start.php Accept-Language: en-us Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) Host: 10.0.0.30 Connection: Keep-Alive ---------------------------------------- Server response (Incorrect response) ---------------------------------------- HTTP/1.1 502 Gateway Error Server: Microsoft-IIS/5.0 Date: Tue, 20 Mar 2001 00:30:10 GMT Connection: close Content-Length: 215 Content-Type: text/html ---------------------------------------- Client request (F5 - refresh) ---------------------------------------- GET /test/done.php HTTP/1.1 Accept: */* Referer: http://10.0.0.30/test/start.php Accept-Language: en-us Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) Host: 10.0.0.30 Connection: Keep-Alive ---------------------------------------- Server response ---------------------------------------- HTTP/1.1 200 OK Server: Microsoft-IIS/5.0 Date: Tue, 20 Mar 2001 00:30:11 GMT Connection: close X-Powered-By: PHP/4.0.4pl1 Content-type: text/html ======================================== ======================================== Scenario #2 - Correct operation ======================================== Client request ---------------------------------------- GET /test/doit.php HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, */* Referer: http://10.0.0.30/test/start.php Accept-Language: en-us Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) Host: 10.0.0.30 Connection: Keep-Alive ---------------------------------------- Server response ---------------------------------------- HTTP/1.1 302 Object Moved Location: done.php Server: Microsoft-IIS/5.0 Content-Type: text/html Connection: close Content-Length: 131 ---------------------------------------- Client request (automatic IE request) ---------------------------------------- GET /test/done.php HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, */* Referer: http://10.0.0.30/test/start.php Accept-Language: en-us Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) Host: 10.0.0.30 Connection: Keep-Alive ---------------------------------------- Server response (Correct response) ---------------------------------------- HTTP/1.1 200 OK Server: Microsoft-IIS/5.0 Date: Tue, 20 Mar 2001 00:33:02 GMT Connection: close X-Powered-By: PHP/4.0.4pl1 Content-type: text/html ======================================== ------------------------------------------------------------------------ Edit this bug report at http://bugs.php.net/?id=9852&edit=1 -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]