PHPでHTTPヘッダーを取得する方法(getallheadersと$_SERVER)
「PHPでJavaScriptのカスタムHTTPヘッダーを取得するにはどうすればいいの?」
そんな疑問に答えるため、getallheaders()関数と$_SERVER変数を使った取得方法と注意点を、具体的なコード付きで解説します。
このサイトでは以下のようなカスタムヘッダーを送った場合で解説します。
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"];