update: Last updated: 165view
【php】リファラURLを取得してパラメータの値を抽出する方法
リファラを取得して何らかの処理をするときに、ついてです。
リファラとは。
そもそもリファラ(referer)とは、ユーザーがどのサイトから流入してきたのかがわかるものです。
リファラを知ると、どこのサイトから流入が多いのかわかるため、サイト解析等諸々といろんなことに役立つことがあるわけです。。
今回はそんな役立つリファラの取得方法とリファラに入ってるパラメータの一部だけを取得したい、
そんな場面があったので備忘録がてら記事にしました。
PHPでリファラを取得する記述
どこのページから流入してきたかを知るのには、
$ref = $_SERVER['HTTP_REFERER'];
上記の記述で下記の例のように変数$refに遷移前のURLが返ってきます。
例:https://test.co.jp/test/123/sample.html?a=12345&b=67890
取得した遷移前のURLを分解し、連想配列に格納ができるんです。一文で!便利!
$box = parse_url($ref);
これで連想配列$boxに分解したURLが格納されました。
配列の中身を確認できるvar_dump()を使用して連想配列$boxの中身を確認してみましょう。
var_dump($box);
連想配列$boxの中身は...
array(4) {
["scheme"]=>
string(5) "https"
["host"]=>
string(10) "test.co.jp"
["path"]=>
string(21) "/test/123/sample.html"
["query"]=>
string(15) "a=12345&b=67890"
}
パラメータだけを抽出したい場合
そもそもパラメータというのは、URLの末尾の?以降のものをさします。
例:https://test.co.jp/test/123/sample.html?a=12345&b=67890
例でいうとa=12345&b=67890にあたります。
なぜURLの末尾にパラメータをつけるのか、目的は何なのかというと。
いくつかあるようです。
- 情報の受け渡し
- 情報の格納
- 重複コンテンツの回避
- 何らかの判別
パラメータをつけるとさまざまなコトができるんですね。
さまざまなコトができるので、取得したい時が多々あります。
リファラからパラメータの特定のキーだけを取得
例:https://test.co.jp/test/123/sample.html?a=12345&b=67890
例として、上記URLをリファラだとします。
パラメータ?a=12345&b=67890にある
キーaに対する値を取得したい場合は。
//リファラを取得
$ref = $_SERVER['HTTP_REFERER'];
//URLの構成要素ごとに連想配列に格納
$box = parse_url($ref);
//さらに分解して連想配列$arrに格納
parse_str($box,$arr);
//特定キーの値を取得して変数$valに格納
$val = $arr['a'];
$valにはキーaの値「12345」が入ります。
コメントアウトが若干見づらいですね...はずしました!
$ref = $_SERVER['HTTP_REFERER'];
$box = parse_url($ref, PHP_URL_QUERY);
parse_str($box,$arr);
$val = $arr['a'];
サイトの内部で取得
例:https://test.co.jp/test/123/sample.html?a=12345&b=67890
例として、上記URLがページだった場合
$val = $_GET['a'];
$_GETで指定したキーaの値が、変数$val格納されますので、
$valにはキーaの値「12345」が入ります。
ちなみに。
javascriptで取得したい場合はこちらの記事を参考にしてみてください♪
javascriptで取得する場合⇒【javascript】URLパラメータにある特定キーの値を取得する