PHP で現在のリクエストの http ヘッダーを取得することは可能ですか? Web サーバーとして Apache を使用していませんが、nginx を使用しています。
使用してみgetallheaders()
ましたが、取得していCall to undefined function getallheaders()
ます。
PHP で現在のリクエストの http ヘッダーを取得することは可能ですか? Web サーバーとして Apache を使用していませんが、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;
}
}
サーバーを PHP 5.4 にアップグレードすると、fastcgi を介してgetallheaders()にアクセスできるようになるか、foreach
ループと少しの正規表現を使用して $_SERVER から必要なものを単純に解析できます。
nginx の getallheaders() + apache_request_headers() の組み合わせ
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;
}