它们都存储在$_SERVER
中吗?包括自定义的变量吗?
试试这个
print_r
($_SERVER)
它将列出数组中的所有内容
您可以使用getallheaders()
函数获取所有发送的HTTP头的数组。
$headers = getallheaders();
foreach($headers as $key=>$val){
echo $key . ': ' . $val . '<br>';
}
$_COOKIE
将包含客户端发送的已解析的 cookie。但是不会有 $_SERVER['HTTP_COOKIE']
。 - Gumbogetallheaders
有何不同?后者是否会剥离某些标头? - Paceriergetallheaders
是 服务器特定扩展 的一部分,因此只有在使用 Apache 模块时才可用。另一方面,$_SERVER 始终可用(作为 Web 服务器工作)。 - Niki Romagnoliapache_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;
}
}
?>
查看 $_SERVER 变量以查看其包含的内容。链接到的手册页面上有很多有用的信息,但也可以使用 var_dump
来查看其中的实际内容。许多条目将或不会被填充,这取决于客户端决定做什么以及 PHP 的奇怪癖好。查看我本地服务器上的变量时,还有一个 $_SERVER["ALL_HTTP"] 条目,它只是将所有条目列为字符串,但显然这不是标准的,因为它没有在手册页面上列出。
你可以使用apache_request_header()函数,或许能帮到你。
$headers = apache_request_headers();
foreach ($headers as $header => $value) {
echo "<pre>";
echo "$header : $value";
echo "</pre>";
}
发生的情况是http头的名称被重写:
这至少是我观察到的自定义标头和apache 2.4。这不是您应该检查的规范或全面列表,但它可能会引导您朝正确的方向,因为对我来说以上所有内容都没有帮助。
<?php print_r($_SERVER[URL]) ?>
。 - LeRoySSL_*
标头,而getallheaders()
则会。 - Benoit Duffez