Edit report at http://bugs.php.net/bug.php?id=52555&edit=1
ID: 52555 Comment by: dragoo...@php.net Reported by: dragoo...@php.net Summary: Headers_List not returning HTTP Status Code Status: Bogus Type: Bug Package: *Web Server problem PHP Version: 5.3.3 Assigned To: dragoonis Block user comment: N New Comment: After some discussions in IRC we have concluded that it's best to make a new function to give us the current response code rather than modifying existing functionality. I've added the patch below to be tested and committed into TRUNK or wherever. Cheers. Paul. Previous Comments: ------------------------------------------------------------------------ [2010-08-07 15:53:20] dragoo...@php.net The following patch has been added/updated: Patch Name: http_response_code Revision: 1281189200 URL: http://bugs.php.net/patch-display.php?bug=52555&patch=http_response_code&revision=1281189200 ------------------------------------------------------------------------ [2010-08-06 14:15:06] dragoo...@php.net As per IRC conversations, the status_line or http_response_code are not headers therefore should not be returned from headers_list() so the conclusion is to make a new function to give you http_response_code. I will update this ticket with the patch. ------------------------------------------------------------------------ [2010-08-06 13:42:58] johan...@php.net RFC 2616 (Hypertext Transfer Protocol -- HTTP/1.1) makes a difference between the Status-Line (6.1) and the Headers (6.2) that we allow setting the Status-Line via header() is kind of a hack, headers_list() should only list headers so users can work with them easily (like splitting up at ": " etc.) ------------------------------------------------------------------------ [2010-08-06 12:50:43] dragoo...@php.net Description: ------------ Ok so i've found the reason why this doesn't work but i'd like feedback on the appropriate area to change as this looks like it was intentionally developed this way. headers_list() gets passed SG(sapi_headers).headers and prints them. This works however when you do header() -> sapi_header_op() and you set a response code such as 'HTTP/1.0 404 Not Found'. It does not put this header into SG(sapi_headers).headers but it puts it into SG(sapi_headers).http_response_code instead. This looks to be intentional as there are special functions for updating the response code such as sapi_update_response_code() So the end question is, should I modify sapi_header_op() to also include the response code in SG(sapi_headers).headers or should I modify headers_list() to receive SG(sapi_headers).headers and SG(sapi_headers).http_response_code. I could also make a new function which only returns SG(sapi_headers).http_response_code but i think that's a waste of time and could update headers_list() or whatnot. FYI: I tested apache_response_headers() and got no http response code in their either. Test script: --------------- <?php header("Content-type: text/plain"); header('HTTP/1.0 404 Not Found'); var_dump(headers_list()); exit; Expected result: ---------------- array(3) { [0]=> string(34) "X-Powered-By: PHP/5.3.2-1ubuntu4.2" [1]=> string(30) "Content-type: text/plain" [2]=> string(22) "HTTP/1.0 404 Not Found" } Actual result: -------------- array(2) { [0]=> string(34) "X-Powered-By: PHP/5.3.2-1ubuntu4.2" [1]=> string(30) "Content-type: text/plain" } ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=52555&edit=1