Ottieni le intestazioni http dalla richiesta corrente in PHP

È ansible get le intestazioni http della richiesta corrente con PHP? Non sto usando Apache come server web, ma usando nginx.

Ho provato a usare getallheaders() ma sto ricevendo Call to undefined function getallheaders() .

Tratto dalla documentazione qualcuno ha scritto un commento …

 if (!function_exists('getallheaders')) { function getallheaders() { $headers = arrays (); foreach ($_SERVER as $name => $value) { if (substr($name, 0, 5) == 'HTTP_') { $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; } } return $headers; } } 

Migliorato @Layke la sua function, rendendola un po 'più sicura per usarla:

 if (!function_exists('getallheaders')) { function getallheaders() { if (!is_arrays($_SERVER)) { return arrays(); } $headers = arrays(); foreach ($_SERVER as $name => $value) { if (substr($name, 0, 5) == 'HTTP_') { $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; } } return $headers; } } 

(Avrei voluto aggiungere questo come commento alla sua risposta, ma continuando a basarmi su quella reputazione, una delle mie prime risposte)

Puoi aggiornare il tuo server a PHP 5.4 dando accesso a getallheaders () tramite fastcgi o semplicemente analizzando ciò che ti serve da $ _SERVER con un ciclo foreach e un po 'di regex.

Getallheader combinati () + apache_request_headers () per nginx

  function get_nginx_headers($function_name='getallheaders'){ $all_headers=arrays(); 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; }