PHPでアクセスのあるページのURLを取得する
20/01/11 17:05:38 20/01/11 17:05:38
PHPはWebサイトの画面作成、クライアントサイドの処理実装、サーバーサイドの処理実装、どれをとっても利便性の高い言語です。そして、クライアントとサーバーの間の処理を自由に扱える点も魅力です。
その中の簡単な機能の一つが現在アクセスしているページURLの取得です。
$_SERVERで現在のURLを取得する
$_SERVERではスーパーグローバル変数と呼ばれるもので、ここにアクセスすると現在アクセスのあるURLを取得できます。
具体的なコードは以下です。
$_SERVER['REQUEST_URI']
REQUEST_URIは、$_SERVERの中のURLが存在する場所です。ホスト名を取得したい場合、以下のようにHTTP_HOSTを指定します。
$_SERVER['HTTP_HOST']
URLを取得したい場合はREQUEST_URIを指定し、ホストを取得したい場合はHTTP_HOSTを指定します。
HTTP or HTTPSの判定
ここ数年はGoogleの検索エンジンでもSSL化が重要視されており、HTTPでのアクセスかHTTPSでのアクセスかを判定する機会は増えています。ブログ運営者などは、特にHTTPとHTTPSを意識する機会は多いでしょう。
ブログ運営の場合ツールで自動的に判別できるのですが、Webサイト制作においてはコードでも把握しておいた方が良いでしょう。と言っても判別方法は極めて簡単で、$_SERVER の’HTTPS’にアクセスするだけです。サンプルコードは以下です。
echo $_SERVER['HTTPS'];
このコードを実行すると、「on」と出力されます。つまり、HTTPSでのアクセスを意味しています。HTTPでアクセスした場合、NULLになります。またonとNULLで判別するのではなく、以下のようにあらかじめ出力コードを決めておくことも可能です。
echo (empty($_SERVER['HTTPS']) ? 'http://' : 'https://')
これを実行すると、「’https://’」となります。現在のURLを取得するコードは以下です。
echo (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
index.phpという名称のファイルで編集していた場合、出力結果は以下になります。
‘http://localhost/index.php’
クエリ文字の処理
クエリ文字列とは、WebブラウザなどがWebサーバーに送信するデータをURLの末尾に特定の形式で表記したものです。クライアントからサーバーにパラメーターを渡す際に付いている表記になります。
より具体的には、URLを後ろの方に付いている?の後ろにid等が付いているものです。厳密にはクエリ文字には二種類あり、「パッシブパラメーター」と「アクティブパラメーター」の二種類です。
まずパッシブパラメーターは表示されるコンテンツには影響を与えないクエリ文字で、目的はWebサイトのアクセス解析のみです。パッシブパラメーターを見ることで、ユーザーがどこからWebサイトを訪問したのかわかります。
特にWebサイトを収益化する際に使用します。次にアクティブパラメーターですが、これは表示されるコンテンツにも影響を与えるクエリ文字です。ECサイトの並べ替えやフィルタリングなどの機能がその代表例です。
ECサイトを利用したことのある人は多いかと思いますが、もしかするとURLまでは見ていないかもしれません。並べ替えやフィルタリングにアクティブパラメーターが使われていることにピンと来ない方は、ぜひ今度並べ替えやフィルタリングを行ったときのURLをチェックしてみてください。
ページ自体は変わっていないにも関わらず、URLの後半部分が変化しているはずです。ページ自体は変わっていないのに、ページの動的な動きに合わせて変化するのがアクティブパラメーターの役割です。
クエリ文字の説明が長くなりましたが、このクエリ文字に処理を加えてURLを取得することが可能です。サンプルコードは以下です。
// 最後のクエリ文字も表示させる($_SERVER['REQUEST_URI'])
echo (empty($_SERVER['HTTPS']) ? 'http://' : 'https://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
// 最後のクエリ文字は表示させない($_SERVER['SCRIPT_NAME'])
echo (empty($_SERVER['HTTPS']) ? 'http://' : 'https://').$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'];
アドレスは適当に記載していますが、このように?id以降があるかないかで変わってきます。
http://www.○○.com/url-○○?id=○○
http://www.○○.com/url-○○
またURL自体は取得せず、クエリ文字のみを取得することも可能です。
echo $_SERVER['QUERY_STRING'];
このコードの結果、「id=○○」のようにクエリ文字のみが取得できます。また、以下のようにクエリ文字を含めたURLを定数に固定することもできます。
// 「URL」という定数名で定義する
define (URL, (empty($_SERVER['HTTPS']) ? 'http://' : 'https://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
その他のサーバー変数
「$_SERVER[‘REQUEST_URI’]」と「$_SERVER[‘HTTP_HOST’]」を紹介しましたが、これ以外にもサーバー変数はいろいろあります。使用機会があるかもしれないので、有名どころを紹介しておきます。
$_SERVER['SERVER_NAME']
現在のサーバーのホスト名
$_SERVER['REQUEST_METHOD']
現在のページにアクセスする際に使用されたメソッド
(POST,GETなど)
$_SERVER['DOCUMENT_ROOT']
現在実行されているスクリプトのドキュメントルートディレクトリ
$_SERVER['SCRIPT_FILENAME']
現在実行されているスクリプトの絶対パス
$_SERVER['SCRIPT_NAME']
現在実行されているスクリプトのパス
$_SERVER['SERVER_PROTOCOL']
ページがリクエストされた際のプロトコル名/バージョン
$_SERVER['QUERY_STRING']
ページがリクエストされた際に検索引数があれば、その値
$_SERVER['PHP_SELF']
現在実行されているスクリプトのファイル名
$_SERVER['REMOTE_ADDR']
訪問したユーザーのIPアドレス
$_SERVER['REMOTE_PORT']
webサーバの通信に使用されているポート番号
他にも数多いのですべては紹介しませんが、だいたいどのような変数が取得できるのかイメージは付くかと思います。PHPでWebサイトを構築する際には使用することもあるので、きっちり覚えるというよりはざっくり把握しておいてください。
人気記事