Edit report at http://bugs.php.net/bug.php?id=36705&edit=1
ID: 36705
Comment by: hanskrentel at yahoo dot de
Reported by: alisencer at gmail dot com
Summary: Location header results in duplicate Status header
([f]cgi only)
Status: Closed
Type: Bug
Package: Unknown/Other Function
Operating System: FreeBSD
PHP Version: 5.1.2
New Comment:
This was reported to work for 5.3.0 I was curious how that behaves on
5.2.x and did run a test. It works, here are the details:
PHP 5.2.6 (cgi-fcgi) (built: May 2 2008 18:02:06)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
with Xdebug v2.0.0RC4-dev, Copyright (c) 2002, 2003, 2004, 2005,
2006, 2007, by Derick Rethans
Status: 301
Location: http://www.example.org
Content-type: text/html
Previous Comments:
------------------------------------------------------------------------
[2008-04-13 23:36:23] [email protected]
bj...@lindsay:~$ ./php/5.3/sapi/cgi/php-cgi
<?php
header("Status: 301");
header("Location: http://www.example.org");
?>
X-Powered-By: PHP/5.3.0-dev
Status: 301
Location: http://www.example.org
Content-type: text/html; charset=utf-8
Works fine now...
------------------------------------------------------------------------
[2006-12-07 20:21:29] chris at vault5 dot com
This bug is filed against FreeBSD but it is certainly not limited to
that OS.
Using the Microsoft IIS FastCGI ISAPI extension this issue occurs on
IIS, too.
------------------------------------------------------------------------
[2006-05-03 18:37:20] phpbugs at thequod dot de
As far as I remember from looking around because of the
already mentioned "bogus" bug
http://bugs.php.net/bug.php?id=33225:
The CGI spec says that there should only be one Status
header.
In my humble opinion, PHP should take care of sending only
one status header.
In the case of "Location:" any existing one should get
overwritten and not added.
------------------------------------------------------------------------
[2006-04-22 07:57:34] bryan at b1t5 dot com
The most effective workaround is to just edit mod_fastcgi.c
------------------------------------
if (strcasecmp(name, "Status") == 0) {
int statusValue = strtol(value, NULL, 10);
if (hasStatus) {
/* comment out the braindead line below */
/* goto DuplicateNotAllowed; */
}
if (statusValue < 0) {
fr->parseHeader = SCAN_CGI_BAD_HEADER;
return ap_psprintf(r->pool, "invalid Status '%s'",
value);
}
hasStatus = TRUE;
r->status = statusValue;
r->status_line = ap_pstrdup(r->pool, value);
continue;
}
------------------------------------
apache doesn't care how many times you set r->status. Set it once,
twice, 500 times even -- it doesn't matter cuz r is just a struct you
fill up before calling ap_send_http_header(r)
------------------------------------------------------------------------
[2006-03-13 03:55:42] judas dot iscariote at gmail dot com
as an effective workaround to this problem, you can use PEAR HTTP_Header
class.
hint : method sendStatusCode()
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/bug.php?id=36705
--
Edit this bug report at http://bugs.php.net/bug.php?id=36705&edit=1