トップへ(mam-mam.net/)

PHPでヘッダーの値を取得する方法 ~サンプルソースコード

検索:

PHPでヘッダーの値を取得する方法 ~サンプルソースコード

PHPでヘッダーの値を取得するには、
getallheaders()関数を使用する方法と
$_SERVER を使用する方法があります。
今般、以下のようなJavascriptで
X-Custom: test
カスタムヘッダーを送った場合でテストしてみます。

  <script>
    //ヘッダーを追加
    let hd = new Headers();
    hd.append("X-Custom", "test");
    //リクエストの作成
    let req = new Request("header.php", {method:"GET", headers:hd} );
    //ヘッダー付きでリクエスト
    fetch(req).then(function(res){
      res.text().then(function(t){
        document.write(t);
      });
    });
  </script>

$_SERVER を使用してヘッダーの値を取得した場合

$_SERVER はヘッダー名が以下のように変換されますので注意が必要です。

  1. ハイフンはアンダースコアに変換
  2. 大文字に変換
  3. 先頭に"HTTP_"の文字が付く
よって、
$_SERVER["X-Custom"]では取得できず、$_SERVER["HTTP_X_CUSTOM"]で取得することになります。

var_dump($_SERVER);
array(49) {
  ・・・省略・・・

  ["HTTP_X_CUSTOM"] => string(4) "test"

  ・・・省略・・・
}

getallheaders()関数を使用してヘッダーの値を取得した場合

getallheaders()関数を使用した場合は、送り込んだカスタムヘッダー名は小文字に変換されることが多いようで getallheaders()["x-custom"] で取得することになります。
ヘッダー名は大文字小文字の区別がないそうなので、大文字小文字変換されても取得しなければならず、getallheaders()関数を使用する場合も注意が必要です。

var_dump( getallheaders() );
array(16) {
  ・・・省略・・・

  ["x-custom"] => string(4) "test"

  ・・・省略・・・
}

以下のようにヘッダー名を小文字変換してから取得するのが安全かもしれません。

  $law_headers=getallheaders();
  $hds=[];
  foreach($law_headers as $key=>$val){
    $hds[strtolower($key)]=$val;
  }
  echo $hds["x-custom"];