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
+Operating System: windows vista
PHP Version: 5.3CVS-2009-03-17 (snap)
New Comment:
when use this test code:
test.php:
<?php
header("Location: http://www.php.net/");
exit;
?>
use broswer to visit http://localhost/test.php, the status line in
response is:
HTTP/1.1 302 Redirect
and use php-cgi.exe under commend line get:
D:\project\www>php-cgi ./test.php
Status: 302 Moved Temporarily
Location: http://www.php.net/
Content-type: text/html; charset=utf-8
Previous Comments:
------------------------------------------------------------------------
[2009-03-17 14:13:28] make dot fire at gmail dot com
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.
------------------------------------------------------------------------
[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] [email protected]
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