¿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()
.
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()
.
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
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;
}
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.
Volomike
Esto debería funcionar:
<?php
print_r(
array_intersect_key(
$_SERVER,
array_flip(
preg_grep(
'/^HTTP_/',
array_keys($_SERVER),
0
)
)
)
);
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