PHP 8.5.8 Released!

getallheaders

(PHP 4, PHP 5, PHP 7, PHP 8)

getallheaders获取全部 HTTP 请求 header

说明

function getallheaders(): array

获取当前请求的所有请求头信息。

此函数是 apache_request_headers() 的别名。请阅读 apache_request_headers() 文档获得更多信息。

参数

此函数没有参数。

返回值

当前请求中所有 HTTP header 的关联数组。

更新日志

版本 说明
7.3.0 该函数可以在 FPM SAPI 中使用。

示例

示例 #1 getallheaders() 示例

<?php
foreach (getallheaders() as $name => $value) {
 echo "$name: $value\n";
}
?>

参见

发现了问题?

了解如何改进此页面提交拉取请求报告一个错误
+添加备注

用户贡献的备注 7 notes

up
138
joyview at gmail dot com
17 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;
 }
}
?>
up
36
Anonymous
10 years ago
There's a polyfill for this that can be downloaded or installed via composer:
https://github.com/ralouphie/getallheaders 
up
28
lorro at lorro dot hu
21 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.
up
15
michaelmcandrew at thirdsectordesign dot org
6 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);
up
4
acidfilez at gmail dot com
15 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
up
0
divinity76 at gmail dot com
3 years ago
warning, at least on php-fpm 8.2.1 and nginx, getallheaders() will return "Content-Length" and "Content-Type" both containing emptystring, even for requests without any of these 2 headers. you can do something like
<?php
$request_headers = getallheaders();
if(($request_headers["Content-Type"] ?? null) === "" && ($request_headers["Content-Length"] ?? null) === "") {
 // probably a getallheaders() bug, not actual request headers.
 unset($request_headers["Content-Type"], $request_headers["Content-Length"]);
}
?>

- might be a bug in nginx rather than php-fpm, i don't know. anyway a real request wouldn't leave them at emptystring
up
-1
majksner at gmail dot com
15 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; 
 } 
}
?>
+添加备注

AltStyle によって変換されたページ (->オリジナル) /