Obtenga los encabezados http de la solicitud actual en PHP

2 minutos de lectura

avatar de usuario
justin

¿Es posible obtener los encabezados http de la solicitud actual con PHP? Soy no usando Apache como servidor web, pero usando nginx.

Traté de usar getallheaders() pero estoy recibiendo Call to undefined function getallheaders().

  • como puede ver en mi respuesta, aún puede usar getallheaders()

    – gabrielem

    5 de noviembre de 2012 a las 1:46

  • Ve a votar aquí: errores.php.net/bug.php?id=62596

    – Campana

    11/03/2017 a las 22:43

avatar de usuario
lago

Tomado de la documentación alguien escribió un comentario

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; 
    } 
} 

  • Gracias funciona Pero, ¿podría explicar cuál es el propósito de ucwords y strtolower en esa función? Es necesario ?

    – Michal S.

    20 de noviembre de 2016 a las 15:33

  • Un error en esta función es que los encabezados en mayúsculas como “DNT” (Do Not Track) se convertirán en “Dnt”, que NO es el caso de los getallheaders() nativos.

    – Campana

    11 de marzo de 2017 a las 22:44

  • No aparecía la “Autorización” con esta función… ¿Alguna idea?

    – Toto NaBendo

    26 de abril de 2019 a las 7:36

avatar de usuario
Rafa Sashi

getallheaders() combinados + apache_request_headers() para 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;
}

avatar de usuario
Marcin Orlowski

Puede actualizar su servidor a PHP 5.4, lo que le da acceso a obtener todos los encabezados () a través de fastcgi o simplemente analice lo que necesita de $_SERVER con un foreach bucle y un poco de expresión regular.

avatar de usuario
Volomike

Esto debería funcionar:

<?php 

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

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad