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 はヘッダー名が以下のように変換されますので注意が必要です。
- ハイフンはアンダースコアに変換
- 大文字に変換
- 先頭に"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"];