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] bj...@php.net 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