CascadiaPHP 2024

getallheaders

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

getallheadersВозвращает все заголовки HTTP-запроса

Описание

getallheaders(): array

Возвращает все заголовки для текущего HTTP-запроса.

Эта функция является псевдонимом функции apache_request_headers(). Пожалуйста, обратитесь к описанию функции apache_request_headers() для получения детальной информации о её работе.

Список параметров

У этой функции нет параметров.

Возвращаемые значения

Ассоциативный массив, содержащий все HTTP-заголовки для данного запроса или false в случае возникновения ошибок.

Список изменений

Версия Описание
7.3.0 Эта функция стала доступна в SAPI FPM.

Примеры

Пример #1 Пример использования getallheaders()

<?php

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

?>

Смотрите также

add a note

User Contributed Notes 9 notes

up
135
joyview at gmail dot com
16 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
17
michaelmcandrew at thirdsectordesign dot org
4 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
36
Anonymous
8 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
19 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
5
acidfilez at gmail dot com
13 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
-2
majksner at gmail dot com
13 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;
}
}
?>
up
-1
divinity76 at gmail dot com
1 year 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
-5
Dimitri
2 years 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();
?>
up
-15
andersmyren at hotmail dot com
4 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.
To Top