Подтвердить что ты не робот

Получить заголовки http из текущего запроса в PHP

Можно ли получить заголовки http текущего запроса с помощью PHP? Я не, используя Apache в качестве веб-сервера, но используя nginx.

Я попытался использовать getallheaders(), но я получаю Call to undefined function getallheaders().

4b9b3361

Ответ 1

В документации, которую кто-то написал комментарий...

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

Ответ 2

Улучшена функция @Layke, что делает ее более безопасной для ее использования:

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

(хотел бы я просто добавить это как комментарий к его ответу, но все еще строю на этой репутации - один из моих первых ответов)

Ответ 3

Вы можете обновить свой сервер до PHP 5.4, тем самым предоставляя вам доступ к getallheaders() через fastcgi или просто анализируя, что вам нужно, из $_SERVER с циклом foreach и небольшим регулярным выражением.

Ответ 4

Комбинированные getallheaders() + apache_request_headers() для 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;
}