$http_response_header
HTTP 响应头
说明
$http_response_header数组与get_headers()函数类似。当使用HTTP 包装器时,$http_response_header将会被 HTTP 响应头信息填充。$http_response_header将被创建于局部作用域中。
范例
Example #1$http_response_header范例
<?php function get_contents() { file_get_contents("http://example.com"); var_dump($http_response_header); } get_contents(); var_dump($http_response_header); ?>
以上例程的输出类似于:
array(9) { [0]=> string(15) "HTTP/1.1 200 OK" [1]=> string(35) "Date: Sat, 12 Apr 2008 17:30:38 GMT" [2]=> string(29) "Server: Apache/2.2.3 (CentOS)" [3]=> string(44) "Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT" [4]=> string(27) "ETag: "280100-1b6-80bfd280"" [5]=> string(20) "Accept-Ranges: bytes" [6]=> string(19) "Content-Length: 438" [7]=> string(17) "Connection: close" [8]=> string(38) "Content-Type: text/html; charset=UTF-8" } NULL
Note that the HTTP wrapper has a hard limit of 1024 characters for the header lines. Any HTTP header received that is longer than this will be ignored and won't appear in $http_response_header. The cURL extension doesn't have this limit. http_fopen_wrapper.c: #define HTTP_HEADER_BLOCK_SIZE 1024
If an HTTP Redirect is encountered, the headers will contain the response line and headers for all requests encountered. Consider this example: <?php file_get_contents("https://httpbin.org/redirect-to?url=https%3A%2F%2Fhttpbin.org%2F"); var_dump($http_response_header); ?> Produces the following: array(23) { [0]=> string(18) "HTTP/1.1 302 FOUND" [1]=> string(17) "Connection: close" [2]=> string(22) "Server: meinheld/0.6.1" [3]=> string(35) "Date: Tue, 06 Feb 2018 11:21:21 GMT" [4]=> string(38) "Content-Type: text/html; charset=utf-8" [5]=> string(17) "Content-Length: 0" [6]=> string(30) "Location: https://httpbin.org/" [7]=> string(30) "Access-Control-Allow-Origin: *" [8]=> string(38) "Access-Control-Allow-Credentials: true" [9]=> string(19) "X-Powered-By: Flask" [10]=> string(34) "X-Processed-Time: 0.00107908248901" [11]=> string(14) "Via: 1.1 vegur" [12]=> string(15) "HTTP/1.1 200 OK" [13]=> string(17) "Connection: close" [14]=> string(22) "Server: meinheld/0.6.1" [15]=> string(35) "Date: Tue, 06 Feb 2018 11:21:21 GMT" [16]=> string(38) "Content-Type: text/html; charset=utf-8" [17]=> string(21) "Content-Length: 13011" [18]=> string(30) "Access-Control-Allow-Origin: *" [19]=> string(38) "Access-Control-Allow-Credentials: true" [20]=> string(19) "X-Powered-By: Flask" [21]=> string(34) "X-Processed-Time: 0.00848388671875" [22]=> string(14) "Via: 1.1 vegur" }
parser function to get formatted headers (with response code) <?php function parseHeaders( $headers ) { $head = array(); foreach( $headers as $k=>$v ) { $t = explode( ':', $v, 2 ); if( isset( $t[1] ) ) $head[ trim($t[0]) ] = trim( $t[1] ); else { $head[] = $v; if( preg_match( "#HTTP/[0-9\.]+\s+([0-9]+)#",$v, $out ) ) $head['reponse_code'] = intval($out[1]); } } return $head; } print_r(parseHeaders($http_response_header)); /* Array ( [0] => HTTP/1.1 200 OK [reponse_code] => 200 [Date] => Fri, 01 May 2015 12:56:09 GMT [Server] => Apache [X-Powered-By] => PHP/5.3.3-7+squeeze18 [Set-Cookie] => PHPSESSID=ng25jekmlipl1smfscq7copdl3; path=/ [Expires] => Thu, 19 Nov 1981 08:52:00 GMT [Cache-Control] => no-store, no-cache, must-revalidate, post-check=0, pre-check=0 [Pragma] => no-cache [Vary] => Accept-Encoding [Content-Length] => 872 [Connection] => close [Content-Type] => text/html ) */ ?>
Bear in mind this special variable is somehow protected and not populated in some situation when the peer server close the connection early on (ssl reset) => Undefined variable: http_response_header A code like this one: $response = @file_get_contents($url); empty($http_response_header) && $http_response_header = array('HTTP/1.1 400 Bad request'); Will return a cryptic error message: Fatal error: Call to undefined function array() on line 2 -- Should you want to cope with this situation: $hdrs = array('HTTP/1.1 400 Bad request'); !empty($htp_response_header) && $hdrs = $http_response_headers; Now use $hdrs in place of $http_response_header