I run PHP via a simple-minded webserver which sets up some environment variables and then calls my php scripts (which begin with a "#!/usr/local/bin/php" line). My scripts must handle all the headers, including the HTTP status header. My standard included file contains "header($_SERVER['SERVER_PROTOCOL'] . ' 200 OK');", and other files may emit a similar header with a different status code for redirection and so forth.
Unfortunately, after upgrading to 4.3.2 I encountered two problems. First, PHP was refusing to emit status headers for which the status code was 200 even when explicity instructed to by the above header() call. Second, while my scripts would run correctly at the command line, when run via a web server I was getting a 404 status and the error message "No input file specified." I have created a patch to work around the above problems; it is a hack, but restores my desired functionality if I also set "cgi.rfc2616_headers = 1" in php.ini. Please consider backing out rev 1.195 of php4/sapi/cgi/cgi_main.c or adding a configuration directive to disable its behaviour. I'm not sure what the correct solution for the "No input file specified" problem is; I'll try to look into it more if I have some time next week, but this was my first peek at PHP's source. -Zak
--- sapi/cgi/cgi_main.c.orig Mon May 26 19:21:08 2003 +++ sapi/cgi/cgi_main.c Fri Jun 13 13:11:58 2003 @@ -279,7 +279,7 @@ rfc2616_headers = 0; } - if (SG(sapi_headers).http_response_code != 200) { + /* if (SG(sapi_headers).http_response_code != 200) */ { int len; if (rfc2616_headers) { @@ -959,12 +959,14 @@ #endif /* Make sure we detect we are a cgi - a bit redundancy here, but the default case is that we have to check only the first one. */ + /* if (getenv("SERVER_SOFTWARE") || getenv("SERVER_NAME") || getenv("GATEWAY_INTERFACE") || getenv("REQUEST_METHOD")) { cgi = 1; } + */ #if PHP_FASTCGI } #endif
-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php