如何让PHP显示从浏览器收到的标头?

时间:2009-09-10 06:31:08

标签: php http header

它们都存储在$_SERVER中吗?即使是定制的?

7 个答案:

答案 0 :(得分:37)

试试这个

  

print_r($ _ SERVER)

它将列出数组中的所有内容

答案 1 :(得分:23)

您可以使用getallheaders()获取已发送的所有HTTP标头的数组。

$headers =  getallheaders();
foreach($headers as $key=>$val){
  echo $key . ': ' . $val . '<br>';
}

答案 2 :(得分:21)

每个HTTP请求标头字段都在$_SERVER中(Cookie除外),密钥以HTTP_开头。如果您使用的是Apache,也可以尝试apache_request_headers

答案 3 :(得分:7)

您只需使用apache_request_headers()或其别名getallheaders()

用法:echo json_encode(getallheaders());

如果以上功能不存在(旧的PHP或nginx),您可以将其用作后备:

<?php 
if (!function_exists('getallheaders')){ 
    function getallheaders() { 
       $headers = ''; 
       foreach ($_SERVER as $name => $value) { 
            if (substr($name, 0, 5) == 'HTTP_') { 
                $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; 
            } 
       } 
       return $headers; 
    } 
}
?>

答案 4 :(得分:6)

查看$_SERVER变量以查看其中包含的内容。链接的手册页有很多有用的信息,但只需在其上var_dump查看其实际内容。许多条目将会或不会被填写,具体取决于客户决定做什么,以及PHP的奇怪怪癖。查看本地服务器上的那个,还有一个$ _SERVER [“ALL_HTTP”]条目,它们只是将它们全部列为字符串,但显然这不是标准的,因为它没有在手册页上列出。 / p>

答案 5 :(得分:0)

你可以使用apache_request_header(); 也许可以帮到你。

$headers = apache_request_headers();        
foreach ($headers as $header => $value) {
 echo "<pre>";
 echo "$header : $value";
 echo "</pre>";
}

答案 6 :(得分:0)

正在发生的事情是重写了HTTP标头的名称:

  1. 前缀为HTTP _
  2. 用'_'代替'-'
  3. 大写字母

至少这是我在自定义标头和Apache 2.4中观察到的内容。这既不是规范性的,也不是您应检查的内容的完整列表,但它可能会为您提供正确的方向,对我而言,上述任何帮助均无济于事。