46

PHP で現在のリクエストの http ヘッダーを取得することは可能ですか? Web サーバーとして Apache を使用していませんが、nginx を使用しています。

使用してみgetallheaders()ましたが、取得していCall to undefined function getallheaders()ます。

4

6 に答える 6

50

誰かがコメントを書いたドキュメントから取られた...

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; 
    } 
} 
于 2013-07-11T10:05:10.987 に答える
3

サーバーを PHP 5.4 にアップグレードすると、fastcgi を介してgetallheaders()にアクセスできるようになるか、foreachループと少しの正規表現を使用して $_SERVER から必要なものを単純に解析できます。

于 2012-11-05T00:53:39.763 に答える
3

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;
}
于 2015-03-27T18:56:00.273 に答える