ID: 47687 User updated by: make dot fire at gmail dot com Reported By: make dot fire at gmail dot com Status: Open Bug Type: HTTP related Operating System: windows server vista PHP Version: 5.3CVS-2009-03-17 (snap) New Comment:
When run php-cgi.exe in command line, the result is expected: D:\project\www>php-cgi ./test.php Status: 303 See Other Location: http://www.php.net/ Content-type: text/html; charset=utf-8 test.php: <?php header('HTTP/1.1 303 See Other'); header("Location: http://www.php.net/"); exit; ?> but visit same file throuth browser and webserver (use http://localhost/test.php) will get 302 status code. Previous Comments: ------------------------------------------------------------------------ [2009-03-17 13:56:28] make dot fire at gmail dot com I try to use the lastest snapshots (PHP 5.3 (5.3.0beta2-dev),VC9 x86 Non Thread Safe (2009-Mar-17 13:00:00)),got the same result. some infomation from phpinfo(): System: Windows NT 6.0 build 6001 (Windows Vista Ultimate Edition Service Pack 1) i586 Build Date: Mar 17 2009 12:55:17 Compiler: MSVC9 (Visual C++ 2008) Architecture: x86 Server API: CGI/FastCGI CGI section: Directive Local Value Master Value cgi.discard_path 0 0 cgi.fix_pathinfo 1 1 cgi.force_redirect 0 0 cgi.nph 0 0 cgi.redirect_status_env no value no value cgi.rfc2616_headers 0 0 fastcgi.impersonate 1 1 fastcgi.logging 1 1 webserver is IIS7, PHP run in FastCGI mode(use php-cgi.exe). I use HttpWatch to catch response header, when use code: <?php header('HTTP/1.1 303 See Other'); header("Location: http://www.php.net/"); exit; ?> the status line in response is: HTTP/1.1 302 Redirect and when use code: <?php header('HTTP/1.1 303 See Other'); exit; ?> the status line in response is: HTTP/1.1 303 See Other ------------------------------------------------------------------------ [2009-03-17 11:03:24] j...@php.net First of all, both of your examples work fine for me and produce the expected results. You did not mention what web server you are using? And exactly what PHP version are you using? ------------------------------------------------------------------------ [2009-03-17 10:01:55] make dot fire at gmail dot com And, the workaround in #25044 is not working, the code: header("Location: http://www.php.net/"); header('HTTP/1.1 303 See Other'); or header("Location: http://www.php.net/"); header('HTTP/1.1 303 See Other', true, 303); will result same response header: HTTP/1.0 302 Found Location: http://www.php.net/ ------------------------------------------------------------------------ [2009-03-17 09:54:21] make dot fire at gmail dot com Description: ------------ This bug is identical to bug #25044. When setting the "Location" HTTP header using the header() function, PHP automatically changes the HTTP response status to "302 Found", Whether other status codes is already set or not. Reproduce code: --------------- file1.php: <?php header('HTTP/1.1 201 Created'); header("Location: http://www.php.net/"); exit; ?> file2.php: <?php header('HTTP/1.1 303 See Other'); header("Location: http://www.php.net/"); exit; ?> Expected result: ---------------- HTTP Response: file1.php: HTTP/1.1 201 Created Location: http://www.php.net/ file2.php: HTTP/1.1 303 See Other Location: http://www.php.net/ Actual result: -------------- HTTP Response: file1.php: HTTP/1.0 302 Found Location: http://www.php.net/ file2.php: HTTP/1.0 302 Found Location: http://www.php.net/ ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=47687&edit=1