PHP getallheadersがカスタムヘッダ(headers)を取得できない問題

1165 ワード

クライアントリクエストはカスタムリクエストヘッダを携帯します
私はこのように取得しました
    $header_info=getallheaders();

最初はこの方法(ローカルphpstudy統合環境)をローカルで使用していましたが、問題はありませんでしたが、プロジェクトを自分のサーバ(lnmp環境)に置いたときに発生し、この方法の問題が見つかりませんでした.不思議なことに、phpマニュアルを見るとgetallheadersという関数はapacheサーバのみをサポートしていることがわかりました.次に、互換性のある方法を見つけます.
    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;
        }
    }
    $header_info=getallheaders();
    var_dump($header_info);

実はこの方法は$_を見つけることですSERVER変数でHTTP_先頭のプロパティは、プロパティを文字列で置き換えます.$SERVER変数のHTTP_USER_IDは実際には上でカスタマイズしたUser-idです.
php中$SERVER変数
Httpヘッダのカスタマイズについては、ヘッダのネーミング仕様に注意する必要があります.下線で名前を付けることはできません.そうしないとnginxサーバの下で読めません.ネーミング仕様を検索する際に、カスタム属性をX-で始まるという問題があります.その後、いくつかの資料を調べたところ、その後のhttpプロトコルはこのようなことを提案していないことが分かった.