从PHP中获取当前请求的http头

是否有可能获得PHP的当前请求的HTTP标头? 我使用Apache作为Web服务器,而是使用nginx

我尝试使用getallheaders()但我正在Call to undefined function getallheaders()

从文档中取得的人写了评论 …

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

(希望我可以加上这个作为对他的回答的评论,但仍然建立在这个声望thingy – 我的第一个答复之一)

您可以将服务器升级到PHP 5.4,从而使您可以通过fastcgi访问getallheaders() ,或者使用foreach循环和一些正则表达式简单地解析$ _SERVER所需的内容。

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