Edit report at http://bugs.php.net/bug.php?id=53444&edit=1
ID: 53444 Updated by: ahar...@php.net Reported by: h...@php.net Summary: get_headers and $http_response_header returns unusable formatting -Status: Feedback +Status: Bogus Type: Bug Package: Streams related PHP Version: 5.3.3 Block user comment: N Private report: N New Comment: I'm pretty sure Ilia intended that as a rhetorical question. hm2k, please don't reopen bugs that have been closed by a core developer just because you disagree with the resolution. It's not the first time you've done it, and to be honest, combined with the constant questioning of whether the triager/assignee is doing the right thing, it's pretty unfriendly. Previous Comments: ------------------------------------------------------------------------ [2010-12-13 12:17:15] h...@php.net Firstly, iliaa you need to learn how to correctly manage bugs. You don't just set them to bogus if you're expecting feedback. I can see that you're expecting feedback as you have asked a question. To answer your question: if you have tried to use these headers for anything useful, you will see that it's impossible to properly distinguish which header is from which request. For example, in the "get_headers format with keys" test, there is absolutely no way to be sure which request returned the values in [Set-Cookie], you can only assume or guess. Another example, with the $http_response_header format, there is no finite way to distinguish one set of responses from another, you can only guess by separating by the status line, however if the headers were poisoned it would render this technique useless. In summary, the formats in which the headers are returned is unusable. The ideal solution would be to separate the headers as they are gathered, giving clear boundaries where one ends and another starts. This should be done natively. ------------------------------------------------------------------------ [2010-12-12 19:40:42] il...@php.net Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php What about the formatting is unusable? In the event of multiple headers the returned values are arrays representing elements of duplicate headers... This is the intended functionality. ------------------------------------------------------------------------ [2010-12-11 19:40:45] h...@php.net I am aware of the reason I am seeing multiple headers. Multiple headers are what I am expecting. I am aware that the URL is redirecting (as per bug #50719), following redirects is what I am expecting. The issue here is the formatting which is unusable. You should address this issue. ------------------------------------------------------------------------ [2010-12-11 16:16:27] il...@php.net Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php The reason you get multiple headers is because the website you are trying to access is redirecting the URL and by default the headers from all requests are being returned. If you don't want redirects to be followed, set the stream context parameter max_redirects to 0. ------------------------------------------------------------------------ [2010-12-01 23:38:50] h...@php.net Description: ------------ The get_headers() function and the $http_response_header variable often returns multiple headers combined into a completely unusable format. Test script: --------------- <pre> <?php /* The get_headers() function and the $http_response_header variable often returns multiple headers combined into a completely unusable format. */ echo "Testing the \$http_response_header format\n"; file_get_contents('http://google.com/'); print_r($http_response_header); echo "Testing the normal get_headers format\n"; $headers=get_headers('http://google.com/'); print_r($headers); echo "Testing the get_headers format with keys\n"; $headers=get_headers('http://google.com/',1); print_r($headers); ?> Expected result: ---------------- Each set of headers from each request should be separated into another array, rather than simply appended to the existing ones. There is currently no safe way to separate the returned values into a usable format. The get_headers format with keys is the worst offender of this. Actual result: -------------- Testing the $http_response_header format Array ( [0] => HTTP/1.0 301 Moved Permanently [1] => Location: http://www.google.com/ [2] => Content-Type: text/html; charset=UTF-8 [3] => Date: Wed, 01 Dec 2010 22:36:17 GMT [4] => Expires: Fri, 31 Dec 2010 22:36:17 GMT [5] => Cache-Control: public, max-age=2592000 [6] => Server: gws [7] => Content-Length: 219 [8] => X-XSS-Protection: 1; mode=block [9] => HTTP/1.0 302 Found [10] => Location: http://www.google.co.uk/ [11] => Cache-Control: private [12] => Content-Type: text/html; charset=UTF-8 [13] => Set-Cookie: PREF=ID=4a205a8a49c12cc1:FF=0:TM=1291242977:LM=1291242977:S=nhA-vebjo6ayX0bQ; expires=Fri, 30-Nov-2012 22:36:17 GMT; path=/; domain=.google.com [14] => Set-Cookie: NID=41=LcFt9zVP6L3dEVMKDUeNblPFQVRlOJaak9BjEUnZErgDkDh9yjljWhydKUteQdcqGh4PM0gaVJlyLT6CEu6K_LpFYJhRJRMkgy7-u45iMOa4xvItP26T_03rqUm-Lrrv; expires=Thu, 02-Jun-2011 22:36:17 GMT; path=/; domain=.google.com; HttpOnly [15] => Date: Wed, 01 Dec 2010 22:36:17 GMT [16] => Server: gws [17] => Content-Length: 221 [18] => X-XSS-Protection: 1; mode=block [19] => HTTP/1.0 200 OK [20] => Date: Wed, 01 Dec 2010 22:36:17 GMT [21] => Expires: -1 [22] => Cache-Control: private, max-age=0 [23] => Content-Type: text/html; charset=ISO-8859-1 [24] => Set-Cookie: PREF=ID=16ffcfbf48f03139:FF=0:TM=1291242977:LM=1291242977:S=Niy-I-NoOBYJK2Tl; expires=Fri, 30-Nov-2012 22:36:17 GMT; path=/; domain=.google.co.uk [25] => Set-Cookie: NID=41=eXX6NtkDo7xtT_Y7l3MVRtVznVjPE0fUUwfcmcSTXOX_80oJhSDTi_NJvidjgq_fwl3xOTvMTXatxlUqJPZsSPk2b8jIZ-oG4_tO9Eyf_beK0jqoJ20u72Ukhsydzxih; expires=Thu, 02-Jun-2011 22:36:17 GMT; path=/; domain=.google.co.uk; HttpOnly [26] => Server: gws [27] => X-XSS-Protection: 1; mode=block ) Testing the normal get_headers format Array ( [0] => HTTP/1.0 301 Moved Permanently [1] => Location: http://www.google.com/ [2] => Content-Type: text/html; charset=UTF-8 [3] => Date: Wed, 01 Dec 2010 22:36:17 GMT [4] => Expires: Fri, 31 Dec 2010 22:36:17 GMT [5] => Cache-Control: public, max-age=2592000 [6] => Server: gws [7] => Content-Length: 219 [8] => X-XSS-Protection: 1; mode=block [9] => HTTP/1.0 302 Found [10] => Location: http://www.google.co.uk/ [11] => Cache-Control: private [12] => Content-Type: text/html; charset=UTF-8 [13] => Set-Cookie: PREF=ID=1c5409426fc05ac7:FF=0:TM=1291242978:LM=1291242978:S=Gq5q1jDdprguyJVX; expires=Fri, 30-Nov-2012 22:36:18 GMT; path=/; domain=.google.com [14] => Set-Cookie: NID=41=YVFzP9yX2jgAGZzNfMYIIjZ2BE3FBZGe35hvkcZnv_vXG_Y6-3WWfeY3X5_B7ggaA7-bLOR2WihGFyFTo_9etxMb-o5KbD6wxs3chDweWERpzOaRzSwRdKZZ0r469lOq; expires=Thu, 02-Jun-2011 22:36:18 GMT; path=/; domain=.google.com; HttpOnly [15] => Date: Wed, 01 Dec 2010 22:36:18 GMT [16] => Server: gws [17] => Content-Length: 221 [18] => X-XSS-Protection: 1; mode=block [19] => HTTP/1.0 200 OK [20] => Date: Wed, 01 Dec 2010 22:36:18 GMT [21] => Expires: -1 [22] => Cache-Control: private, max-age=0 [23] => Content-Type: text/html; charset=ISO-8859-1 [24] => Set-Cookie: PREF=ID=72fb7f7330dc6dda:FF=0:TM=1291242978:LM=1291242978:S=8hdaRNIKWI_17QQW; expires=Fri, 30-Nov-2012 22:36:18 GMT; path=/; domain=.google.co.uk [25] => Set-Cookie: NID=41=emzDdkZVlIzPUExRMV6yXykCd0Jqrc665mzd5smnyV-MCBqEeC7wEndKmpsRqgb5M3_2dfdEK1Fbjwq0OPd87oz9UFjVYXqPqKABcPHtp_FWZw4rUluDtHeBI04rCyHH; expires=Thu, 02-Jun-2011 22:36:18 GMT; path=/; domain=.google.co.uk; HttpOnly [26] => Server: gws [27] => X-XSS-Protection: 1; mode=block ) Testing the get_headers format with keys Array ( [0] => HTTP/1.0 301 Moved Permanently [Location] => Array ( [0] => http://www.google.com/ [1] => http://www.google.co.uk/ ) [Content-Type] => Array ( [0] => text/html; charset=UTF-8 [1] => text/html; charset=UTF-8 [2] => text/html; charset=ISO-8859-1 ) [Date] => Array ( [0] => Wed, 01 Dec 2010 22:36:18 GMT [1] => Wed, 01 Dec 2010 22:36:18 GMT [2] => Wed, 01 Dec 2010 22:36:18 GMT ) [Expires] => Array ( [0] => Fri, 31 Dec 2010 22:36:18 GMT [1] => -1 ) [Cache-Control] => Array ( [0] => public, max-age=2592000 [1] => private [2] => private, max-age=0 ) [Server] => Array ( [0] => gws [1] => gws [2] => gws ) [Content-Length] => Array ( [0] => 219 [1] => 221 ) [X-XSS-Protection] => Array ( [0] => 1; mode=block [1] => 1; mode=block [2] => 1; mode=block ) [1] => HTTP/1.0 302 Found [Set-Cookie] => Array ( [0] => PREF=ID=2325ca533177d4ef:FF=0:TM=1291242978:LM=1291242978:S=nOg-8n0YOwaShUAK; expires=Fri, 30-Nov-2012 22:36:18 GMT; path=/; domain=.google.com [1] => NID=41=R4dJOFuh4Jh_rqx2gNOgUJAjgn9ooyONvaut5VUv18l7G58_9NIMP4WWLWdY4_8hgsVQPdpzljkjZHwxmvKjROrM1-52DndexrKzVs52oyysf93A_HlBpc2B8sRb5s1-; expires=Thu, 02-Jun-2011 22:36:18 GMT; path=/; domain=.google.com; HttpOnly [2] => PREF=ID=5375620b1f946c18:FF=0:TM=1291242978:LM=1291242978:S=HpY6OMdBxJ5saTyh; expires=Fri, 30-Nov-2012 22:36:18 GMT; path=/; domain=.google.co.uk [3] => NID=41=Hif27kRrMTf26VBtWJg8uOojHHEUZGp1w-a-IJVRQIGZJb3RwR9qPSK8hPtPni9pTcljP9WuLfFUgkReiTQJLpJTLuzG4Ymlo_dinxubk2XHC9sXFzvkIxWtZ0lEnLAZ; expires=Thu, 02-Jun-2011 22:36:18 GMT; path=/; domain=.google.co.uk; HttpOnly ) [2] => HTTP/1.0 200 OK ) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=53444&edit=1