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

Reply via email to