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

Lesezeit: 3 Minuten

Holen Sie sich die HTTP Header aus der aktuellen Anfrage in
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().

  • 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

Holen Sie sich die HTTP Header aus der aktuellen Anfrage in
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; 
    } 
} 

  • Danke es funktioniert. Aber könnten Sie erklären, was der Zweck von ist ucwords und strtolower in dieser Funktion? Ist es nötig ?

    – Michael S.

    20. November 2016 um 15:33 Uhr

  • Ein Fehler in dieser Funktion ist, dass Header in Großbuchstaben wie „DNT“ (Do Not Track) zu „Dnt“ werden – was bei nativen getallheaders() NICHT der Fall ist.

    – Glocke

    11. März 2017 um 22:44 Uhr

  • Die “Autorisierung” wurde bei dieser Funktion nicht angezeigt … Irgendeine Idee?

    – Toto Na Bendo

    26. April 2019 um 7:36 Uhr

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.)

1647852848 811 Holen Sie sich die HTTP Header aus der aktuellen Anfrage in
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.

  • Tut nginx immer auf FastCGI laufen? Ist das Warum getallheaders() funktioniert nicht unter PHP 5.3?

    – Ben Harald

    31. Mai 2013 um 18:17 Uhr

  • @BenHarold Siehe Änderungsprotokoll von getallheader: 5.4: Diese Funktion wurde unter FastCGI verfügbar. Bisher wurde es nur unterstützt, wenn PHP als Apache-Modul installiert war.

    – Fred Wuerges

    31. Mai 2013 um 19:00 Uhr


  • @FredWuerges Ich habe das Änderungsprotokoll gelesen. Deshalb habe ich die Fragen gestellt. Um es etwas besser zu formulieren: Verwendet nginx immer FastCGI und ist das der Grund? getallheaders() funktioniert nicht, wenn PHP 5.3 oder älter mit nginx verwendet wird? Bedeutet dies, dass beides getallheaders() und apache_request_headers() funktionieren bei Verwendung von PHP 5.4 und nginx?

    – Ben Harald

    31. Mai 2013 um 21:17 Uhr

  • Dies funktioniert immer noch nicht auf nginx, getallheaders ist unter Apache-Funktionen im PHP-Dokument abgelegt, da es sich nur um Apache handelt, wie auf PHP 5.5 und nginx bestätigt

    – Sammaye

    11. September 2014 um 22:28 Uhr

  • Derzeit funktioniert getallheaders auf PHP7 nicht auf nginx unter FastCGI

    – Jesse Greathouse

    25. Oktober 2015 um 19:55 Uhr

Holen Sie sich die HTTP Header aus der aktuellen Anfrage in
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).

1647852849 865 Holen Sie sich die HTTP Header aus der aktuellen Anfrage in
Volomike

Das sollte funktionieren:

<?php 

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

1005240cookie-checkHolen Sie sich die HTTP-Header aus der aktuellen Anfrage in PHP

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy