getallheaders
(PHP 4, PHP 5, PHP 7, PHP 8)
getallheaders — 获取全部 HTTP 请求头信息
说明
getallheaders(): array
获取当前请求的所有请求头信息。
此函数是 apache_request_headers()的别名。 请阅读 apache_request_headers() 文档获得更多信息。
参数
此函数没有参数。
返回值
包含当前请求所有头信息的数组,失败返回
false
。
更新日志
版本 | 说明 |
---|---|
7.3.0 | 该函数可以在 FPM SAPI 中使用。 |
范例
示例 #1 getallheaders() 示例
<?php
foreach (getallheaders() as $name => $value) {
echo "$name: $value\n";
}
?>

User Contributed Notes 8 notes
joyview at gmail dot com ¶
13 years ago
it could be useful if you using nginx instead of apache
<?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;
}
}
?>
michaelmcandrew at thirdsectordesign dot org ¶
2 years ago
A simple approach to dealing with case insenstive headers (as per RFC2616) is via the built in array_change_key_case() function:
$headers = array_change_key_case(getallheaders(), CASE_LOWER);
Anonymous ¶
6 years ago
There's a polyfill for this that can be downloaded or installed via composer:
https://github.com/ralouphie/getallheaders
lorro at lorro dot hu ¶
17 years ago
Beware that RFC2616 (HTTP/1.1) defines header fields as case-insensitive entities. Therefore, array keys of getallheaders() should be converted first to lower- or uppercase and processed such.
majksner at gmail dot com ¶
11 years ago
apache_request_headers replicement for nginx
<?php
if (!function_exists('apache_request_headers')) {
function apache_request_headers() {
foreach($_SERVER as $key=>$value) {
if (substr($key,0,5)=="HTTP_") {
$key=str_replace(" ","-",ucwords(strtolower(str_replace("_"," ",substr($key,5)))));
$out[$key]=$value;
}else{
$out[$key]=$value;
}
}
return $out;
}
}
?>
acidfilez at gmail dot com ¶
11 years ago
dont forget to add the content_type and content_lenght if your are uploading file:
<?php
function emu_getallheaders() {
foreach ($_SERVER as $name => $value)
{
if (substr($name, 0, 5) == 'HTTP_')
{
$name = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))));
$headers[$name] = $value;
} else if ($name == "CONTENT_TYPE") {
$headers["Content-Type"] = $value;
} else if ($name == "CONTENT_LENGTH") {
$headers["Content-Length"] = $value;
}
}
return $headers;
}
?>
chears magno c. heck
Dimitri ¶
37 minutes ago
retrieve token from header:
<?php
function getAuthorizationHeader(){
$headers = null;
if (isset($_SERVER['Authorization'])) {
$headers = trim($_SERVER["Authorization"]);
}
elseif (isset($_SERVER['HTTP_AUTHORIZATION'])) {
$headers = trim($_SERVER["HTTP_AUTHORIZATION"]);
}
elseif (function_exists('apache_request_headers')) {
$requestHeaders = apache_request_headers();
$requestHeaders = array_combine(array_map('ucwords', array_keys($requestHeaders)), array_values($requestHeaders));
if (isset($requestHeaders['Authorization'])) {
$headers = trim($requestHeaders['Authorization']);
}
}
return $headers;
}
function getBearerToken() {
$headers = getAuthorizationHeader();
if (!empty($headers)) {
if (preg_match('/Bearer\s(\S+)/', $headers, $matches)) {
return $matches[1];
}
}
return null;
}
echo getBearerToken();
?>
andersmyren at hotmail dot com ¶
2 years ago
Due to the else part.
}else{
$out[$key]=$value;
All server Variables are added to the headers list, and that's not the desired outcome.
备份地址:http://www.lvesu.com/blog/php/function.getallheaders.php