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

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

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

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

Взятый из документации кто-то написал комментарий …

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

Улучшена функция @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; } } 

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

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

Комбинированные 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; }