it-swarm.com.de

Holen Sie sich die http-Header aus der aktuellen Anfrage in PHP

Kann man die PHP-Header der aktuellen Anfrage mit PHP abrufen? Ich bin nicht benutze Apache als Webserver, benutze aber Nginx.

Ich habe versucht, getallheaders() zu verwenden, bekomme aber Call to undefined function getallheaders().

39
Justin

Aus der Dokumentation genommen hat jemand einen 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; 
    } 
} 
47
Layke

Die Funktion von @Layke wurde verbessert, was die Verwendung der Funktion etwas sicherer macht: 

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 das einfach als Kommentar zu seiner Antwort hinzufügen, aber immer noch auf diesem Ruf aufbauen - eine meiner ersten Antworten)

23
JanDesch

Kombinierte 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;
}
3
RafaSashi

Sie können Ihren Server auf PHP 5.4 aufrüsten und so über fastcgi auf getallheaders () zugreifen oder einfach mit $ _SERVER analysieren, was Sie mit einer foreach-Schleife und etwas Regex benötigen.

3
Chris Wiegman

Dieses Problem wurde schließlich in PHP 7.3.0 behoben, siehe Versionshinweise .

Fehler behoben: # 62596 (getallheaders () fehlt in PHP-FPM).

1
Geo Salameh

Das sollte funktionieren:

<?php 

print_r(
  array_intersect_key(
    $_SERVER,
    array_flip(
      preg_grep(
        '/^HTTP_/', 
        array_keys($_SERVER),
        0
      )
    )
  )
);
0
Volomike