apache_request_headers

apache_request_headers関数:全てのHTTPリクエストヘッダを取得する

使い方

$headers = apache_request_headers();
//別名エイリアス
$headers = getallheaders();

HTTPリクエストヘッダを取得するには、
$_SERVER変数のHTTP_から始まる要素の値を取得するというのが一般的ですが、全部のHTTPリクエストヘッダを取得するには若干不便です。
その時にはapache_request_headers関数やgetallheaders関数が使えます。
この関数を使うと下記のような配列を取得できます。

array (
  'Host' => 'smcx.jp',
  'Connection' => 'keep-alive',
  'Cache-Control' => 'max-age=0',
  'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
  'User-Agent' => 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36',
  'Accept-Encoding' => 'gzip,deflate,sdch',
  'Accept-Language' => 'ja,en-US;q=0.8,en;q=0.6',
)

※セキュリティ上の理由によりCookieヘッダは削除して非表示にしています。

あなたのブラウザが送ったリクエストヘッダを見たいなら
こちらをご覧ください。

ちなみに$_SERVER変数を使って取得するとこんな感じになります。

$_SERVER['HTTP_HOST'] => 'smcx.jp'
$_SERVER['HTTP_CONNECTION'] => 'keep-alive'
$_SERVER['HTTP_CACHE_CONTROL'] => 'max-age=0'
$_SERVER['HTTP_ACCEPT'] => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
$_SERVER['HTTP_USER_AGENT'] => 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36'
$_SERVER['HTTP_ACCEPT_ENCODING'] => 'gzip,deflate,sdch'
$_SERVER['HTTP_ACCEPT_LANGUAGE'] => 'ja,en-US;q=0.8,en;q=0.6'

※こちらもCookieヘッダは削除して非表示にしています。

使用上の注意点

この関数名を見てわかると思うのですが、WebサーバーにApacheを使ってさらにPHPモジュールで動作させている場合のみ取得できる情報でした。PHP5.4以降ではFast CGIにも対応して、PHP5.5.7ではCLIサーバーにも対応したそうです。(公式サイトより)
その他のWebサーバーをお使いの方は、それぞれでちょっと工夫した実装をしなければなりません。

使いどころ

紹介しておきながらこんなことをいうのも何ですが、この関数の使用はあまりお勧めしません。Webサーバーによって動作できないということもありますので、あらかじめ決まったHTTPヘッダのヘッダ値を取得するだけならば、$_SERVER変数を使う方が無難です。
ロギングの用途やデバッグに使うということであれば、問題ないかもしれませんが、
対応していないWebサーバーで実行するとFatal Errorになりますのでご注意ください。

Webアプリケーションプログラマ/エンジニアにとっては、HTTPリクエストやHTTPレスポンスヘッダを理解することはとても重要です。
1つ1つのヘッダに意味がありますので、この機会にapache_request_headers関数を使って理解を深めることをお勧めします。

公式サイト
http://jp1.php.net/manual/ja/function.apache-request-headers.php