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サイトを構築する際には使用することもあるので、きっちり覚えるというよりはざっくり把握しておいてください。

人気記事

編集部おすすめ記事

この記事を読んだ人はこんな記事を読んでいます

案件探しやフリーランスになるための相談する