SERVER変数を使ったURL取得法をご紹介します。
ホスト名だけや、ホスト名以下のURIのみ、クエリ文字を除外して取得などいろいろな取得方法があります。
それら一般的な方法と、便利に使い回す方法もご紹介します。
現在アクセスしているURLが以下の場合を仮定しています。
http://www.flatflag.nir87.com/url-963?id=256
現在アクセスしているページのURLを取得
サンプルコード
1 |
echo (empty($_SERVER['HTTPS']) ? 'http://' : 'https://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; |
http://www.flatflag.nir87.com/url-963?id=256
現在のURLが表示されました。
説明
上記サンプルでは以下のように動作しています。
$_SERVER[‘HTTPS’] で https のページかを判定
(empty($_SERVER[‘HTTPS’]) ? ‘http://’ : ‘https://’)
サーバー変数で現在のページがHTTPS
かどうかを判定しています。
三項演算子を使って条件分岐をさせておりempty()
で$_SERVER['HTTPS']
が空だったらhttp://
そうじゃなければhttps://
を表示させます。
三項演算子やempty()
に関しては以下の記事で解説しています。
参考:三項演算子で一行で簡単に条件分岐
参考:「empty」で0や空文字判定
$_SERVER[‘HTTP_HOST’] でホスト名を表示
$_SERVER[‘HTTP_HOST’]
現在のホスト名(ドメイン部分)を取得するサーバー変数です。
以下の部分を取得します。
www.flatflag.nir87.com
$_SERVER[‘REQUEST_URI’] でURI(ドメイン以下のパス)を取得
$_SERVER[‘REQUEST_URI’]
現在のURI(ドメイン以下のパス)を取得するサーバー変数です。
以下の部分を取得します。
/url-963?id=256
クエリ文字の処理
クエリ文字を除いて取得などのいろいろな取得方法をご紹介します。
クエリ文字を除いて表示した場合と比較
最後の ? 以降のクエリ文字を省略する方法と比較してみましょう。
1 2 3 4 5 |
// 最後のクエリ文字も表示させる($_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']; |
http://www.flatflag.nir87.com/url-963?id=256
http://www.flatflag.nir87.com/url-963
最後のサーバー変数を$_SERVER['SCRIPT_NAME']
とすることで?
(クエスチョンマーク)以降のクエリ文字は表示されません。
クエリ文字とは?
Webアプリケーションなどでクライアントからサーバにパラメータを渡すのに使われる表記法で、URLの末尾に「?」マークを付け、続けて「名前=値」の形式で記述する。
クエリ文字だけ表示
1 |
echo $_SERVER['QUERY_STRING']; |
id=256
URLの?
(クエスチョンマーク)以降のクエリ文字だけ取得できました。
今回はサーバー変数を使ったURL取得法をご紹介しました。
サーバー変数は他にもさまざまな種類があります。
詳しくは以下の記事で解説しています。
参考:サーバー変数一覧と実用例
定数に定義して使い回そう
最初にご紹介したURL取得法はよく使いますが、複数のサーバー変数を繋ぎ合わせた長いコードとなり、あちこちで使い回すには長ったらしいでしょう。
以下のように定数として定義し、使い回すと便利ですね。
1 2 3 4 5 |
// 「URL」という定数名で定義する define (URL, (empty($_SERVER['HTTPS']) ? 'http://' : 'https://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); // 定数名「URL」だけで取得できる echo URL; |
http://www.flatflag.nir87.com/url-963?id=256
定数で定義すれば簡単に使い回すことが出来ますね。
定数については以下の記事で解説しています。
参考:PHPの定数を使いこなす