headers_list

(PHP 5)

headers_list -- 返回已发送(或准备发送)的响应标头的列表

说明

array headers_list ( void )

headers_list() 将返回一个数字索引的数组,包含有向浏览器/客户端发送的标头。要判断标头是否已被发送,使用 headers_sent()

例子 1. headers_list() 例子

<?php

/* setcookie() will add a response header on its own */
setcookie('foo', 'bar');

/* Define a custom response header
   This will be ignored by most clients */
header("X-Sample-Test: foo");

/* Specify plain text content in our response */
header('Content-type: text/plain');

/* What headers are going to be sent? */
var_dump(headers_list());

?>

上例的输出类似于:

array(4) {
  [0]=>
  string(29) "X-Powered-By: PHP/5.0.0"
  [1]=>
  string(19) "Set-Cookie: foo=bar"
  [2]=>
  string(18) "X-Sample-Test: foo"
  [3]=>
  string(24) "Content-type: text/plain"
}

参见 headers_sent()header()setcookie()


add a note add a note User Contributed Notes
leo at leoberkhout dot nl
24-Oct-2006 04:40
If I change in de above code "php.net" for antoher URL, de code doesn't work properly.

How can it be made in a way like this:
http://webtools.live2support.com/header.php

I spent a hole evening, but I found only a way to make the output more readable:

<?php

function get_headers($host, $url)
{
$headers = array();

$fp = fsockopen ($host, 80, $errno, $errstr, 45);
if (
$fp)
{
fputs ($fp, "GET $url HTTP/1.0\r\n\r\n");
while (!
feof($fp))
{
$char = fgetc($fp);
if(
$char === "\n")
{
if (
ord($header) === 13) { return($headers); }
else {
array_push($headers, trim($header)); }
unset(
$header);
}
else {
$header = $header.$char; }
}
fclose ($fp);
}
}

$Array = get_headers("php.net", "/");

// print_r(get_headers("php.net", "/"));
echo "<P>\n";

   foreach (
$Array as $Key => $Value)
   {
       echo
"<LI>\$_SERVER[\"$Key\"]=$Value\n";
       if (
$Key == 6)
        
$Cookie = $Value;
   }
# End of foreach ($_SERVER as $Key=>$Value)
 
echo "<P>\n";
  echo
"Cookie = $Cookie<BR>\n";
?>

Here I do a check with, for example, key 6, to seperated them from the other values, just for example.

My problem is that the code does not accept www.mysite.com or http://www.mysite.com
robertbienert at gmx dot net
27-Sep-2006 09:59
Also note that Lukes code could be simplified if using the HTTP HEAD method, because it returns only the HTTP headers, not the whole resource.
Luke at Bonanomi dot com
02-Sep-2006 09:56
I arrived here looking for a way to collect headers sent by a remote server. No such luck; so:

<?php
function get_headers($host, $url)
{
  
$headers = array();

  
$fp = fsockopen ($host, 80, $errno, $errstr, 45);
   if (
$fp)
   {
    
fputs ($fp, "GET $url HTTP/1.0\r\n\r\n");
     while (!
feof($fp))
     {
        
$char = fgetc($fp);
         if(
$char === "\n")
         {
           if (
ord($header) === 13) {  return($headers); }
           else {
array_push($headers, trim($header)); }
           unset(
$header);
         }
         else {
$header = $header.$char; }
     }
    
fclose ($fp);
   }
}
?>

print_r(get_headers("php.net", "/"));

Array
(
   [0] => HTTP/1.1 200 OK
   [1] => Date: Sat, 02 Sep 2006 13:47:02 GMT
   [2] => Server: Apache/1.3.37 (Unix) PHP/5.2.0-dev
   [3] => X-Powered-By: PHP/5.2.0-dev
   [4] => Last-Modified: Sat, 02 Sep 2006 13:21:09 GMT
   [5] => Content-language: en
   [6] => Set-Cookie: COUNTRY=USA%2C68.37.136.230; expires=Sat, 09-Sep-2006 13:47:02 GMT; path=/; domain=.php.net
   [7] => Connection: close
   [8] => Content-Type: text/html; charset=utf-8
)