
Justin
Ist es möglich, die HTTP-Header der aktuellen Anfrage mit PHP abzurufen? Ich bin nicht Verwendung von Apache als Webserver, aber Verwendung von nginx.
Ich habe versucht, mit getallheaders()
aber ich bekomme Call to undefined function getallheaders()
.

Layke
Entnommen aus der Dokumentation, die jemand geschrieben hat Kommentar…
if (!function_exists('getallheaders'))
{
function getallheaders()
{
$headers = array ();
foreach ($_SERVER as $name => $value)
{
if (substr($name, 0, 5) == 'HTTP_')
{
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
}
}
return $headers;
}
}
Verbesserte @Layke seine Funktion, wodurch die Verwendung etwas sicherer wird:
if (!function_exists('getallheaders')) {
function getallheaders()
{
if (!is_array($_SERVER)) {
return array();
}
$headers = array();
foreach ($_SERVER as $name => $value) {
if (substr($name, 0, 5) == 'HTTP_') {
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
}
}
return $headers;
}
}
(Ich wünschte, ich könnte dies einfach als Kommentar zu seiner Antwort hinzufügen, aber immer noch auf diesem Ruf-Ding aufbauen – eine meiner ersten Antworten.)

Chris Wiegmann
Sie können Ihren Server auf PHP 5.4 aktualisieren und erhalten dadurch Zugriff auf getallheaders() via fastcgi oder analysieren Sie einfach, was Sie aus $_SERVER mit a benötigen foreach
Schleife und ein wenig Regex.

RafaSashi
Kombiniert getallheaders() + apache_request_headers() für nginx
function get_nginx_headers($function_name="getallheaders"){
$all_headers=array();
if(function_exists($function_name)){
$all_headers=$function_name();
}
else{
foreach($_SERVER as $name => $value){
if(substr($name,0,5)=='HTTP_'){
$name=substr($name,5);
$name=str_replace('_',' ',$name);
$name=strtolower($name);
$name=ucwords($name);
$name=str_replace(' ', '-', $name);
$all_headers[$name] = $value;
}
elseif($function_name=='apache_request_headers'){
$all_headers[$name] = $value;
}
}
}
return $all_headers;
}
Dieses Problem wurde endlich in PHP 7.3.0 behoben, check Versionshinweise.
Fehler behoben #62596 (getallheaders() fehlt bei PHP-FPM).

Volomike
Das sollte funktionieren:
<?php
print_r(
array_intersect_key(
$_SERVER,
array_flip(
preg_grep(
'/^HTTP_/',
array_keys($_SERVER),
0
)
)
)
);
10052400cookie-checkHolen Sie sich die HTTP-Header aus der aktuellen Anfrage in PHPyes
Wie Sie in meiner Antwort sehen können, können Sie immer noch getallheaders() verwenden.
– gabrielem
5. November 2012 um 1:46 Uhr
Gehen Sie hier abstimmen: bugs.php.net/bug.php?id=62596
– Glocke
11. März 2017 um 22:43 Uhr