PHPの$_SERVER変数で現在のURLを取得する方法
Webアプリケーション開発では、現在アクセスされているページのURL情報を動的に取得する場面が発生します。$_SERVER変数はスーパーグローバル変数と呼ばれ、サーバーや実行環境に関する情報が格納されている連想配列です。
現在のURLを取得するには、以下の4ステップで各要素を組み合わせます。
- プロトコルを判定する
- ホスト名を取得する
- パスを取得する
- 完全なURLを組み立てる
各ステップを順番に実行することによって、HTTPまたはHTTPSのプロトコル、ドメイン名、ファイルパスを含む完全なURL文字列を生成できます。以下では、それぞれの手順について詳しく解説していきます。
プロトコルを判定する
プロトコルとは、WebブラウザとWebサーバー間の通信規約のことで、HTTPまたはHTTPSのいずれかになります。$_SERVER['HTTPS']にアクセスすることによって、現在の接続がHTTPSかどうかを判定できます。
<?php
echo $_SERVER['HTTPS'];
?>
上記のコードを実行すると、HTTPSでアクセスされている場合は'on'という文字列が返され、HTTPの場合はNULLとなります。この値を利用して、以下のようにプロトコル文字列を生成します。
<?php
echo (empty($_SERVER['HTTPS']) ? 'http://' : 'https://');
?>
empty関数で$_SERVER['HTTPS']が空かどうかを判定し、三項演算子を使って適切なプロトコル文字列を返しています。この方法により、HTTPとHTTPSの両方の環境に対応したコードが書けます。
ホスト名を取得する
ホスト名とは、Webサイトのドメイン名やポート番号を含む情報のことです。$_SERVER['HTTP_HOST']を使用することによって、リクエストのHostヘッダに含まれるホスト情報を取得できます。
<?php
echo $_SERVER['HTTP_HOST'];
// 実行結果例: example.com
?>
この変数には、ドメイン名だけでなくポート番号も含まれる場合があります。例えば、ローカル環境で開発している際には「localhost:8080」のように表示されることがあります。
【PR】プログラミングや生成AIを無料で学べる「コードキャンプフリー」
パスを取得する
パスとは、ドメイン以下のディレクトリ構造やファイル名を表す部分です。$_SERVER['REQUEST_URI']を使用することで、現在アクセスされているページのパス情報を取得できます。
<?php
echo $_SERVER['REQUEST_URI'];
// 実行結果例: /blog/article.php?id=123
?>
REQUEST_URIには、ファイルパスだけでなくクエリパラメータ(?以降の部分)も含まれています。
完全なURLを組み立てる
プロトコル、ホスト名、パスの3つの要素を文字列連結することによって、完全なURLを生成できます。各要素を取得してドット演算子で連結する方法が一般的です。
<?php
$current_url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://')
. $_SERVER['HTTP_HOST']
. $_SERVER['REQUEST_URI'];
echo $current_url;
// 実行結果例: https://example.com/blog/article.php?id=123
?>
このコードでは、プロトコルの判定結果とホスト名、パスを順番に連結しています。複数行に分けて記述することで、コードの可読性が向上します。
PHPでURLの各要素を個別に取得する方法
URL全体ではなく、特定の要素だけを取得したい場面もあると思います。$_SERVER変数には、URLを構成する各要素に個別にアクセスできる連想配列のキーが用意されており、必要な情報だけを効率的に取り出すことが可能です。
URLの各要素を個別に取得する方法として、以下4つがあります。
- REQUEST_URIでパスを取得する
- HTTP_HOSTでホスト名を取得する
- HTTPSでプロトコルを判定する
- SCRIPT_NAMEでスクリプト名を取得する
それぞれの要素は異なる目的で使用され、状況に応じて適切なものを選択することが重要です。以下では、各要素の取得方法について詳しく解説していきます。
REQUEST_URIでパスを取得する
REQUEST_URIは、ドメイン以下のパス情報とクエリパラメータを含む文字列を返します。この変数を使用することで、現在アクセスされているページの詳細な位置情報を取得できます。
<?php
echo $_SERVER['REQUEST_URI'];
// 実行結果例: /category/article.php?page=2
?>
REQUEST_URIには、ディレクトリ構造、ファイル名、クエリパラメータの全てが含まれています。パンくずリストの生成やページネーションの実装など、多くの場面で活用できる情報です。
【PR】『Python』を学べる企業・個人向けのプログラミングコース
HTTP_HOSTでホスト名を取得する
HTTP_HOSTは、リクエストヘッダのHost情報を返す変数です。この値を使用することで、現在アクセスされているドメイン名やポート番号を取得できます。
<?php
echo $_SERVER['HTTP_HOST'];
// 実行結果例: www.example.com
?>
HTTP_HOSTとよく似た変数にSERVER_NAMEがありますが、HTTP_HOSTはクライアントから送信されたリクエストヘッダの値を返すのに対し、SERVER_NAMEはWebサーバーの設定ファイルで定義された値を返すという違いがあります。
HTTPSでプロトコルを判定する
HTTPSは現在の接続が「SSL/TLS暗号化通信を使用しているかどうか」を判定するための変数です。セキュアな接続かどうかを確認する際に使用します。
<?php
if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') {
echo 'セキュアな接続です';
} else {
echo '通常のHTTP接続です';
}
?>
HTTPSの値がemptyまたは'off'の場合は通常のHTTP接続、それ以外(通常は'on')の場合はHTTPS接続と判定します。この判定を利用して、セキュアでないページから安全なページへのリダイレクト処理を実装することもできます。
SCRIPT_NAMEでスクリプト名を取得する
SCRIPT_NAMEは、現在実行されているPHPファイルのパスを返す変数です。REQUEST_URIと異なり、クエリパラメータを含まない純粋なスクリプトパスのみを取得できます。
<?php
echo $_SERVER['SCRIPT_NAME'];
// 実行結果例: /blog/article.php
?>
SCRIPT_NAMEはクエリパラメータが不要な場合、スクリプトファイルの場所だけを知りたい場合などに便利です。フォームの送信先URLを動的に生成する際などに活用できます。
PHPでURLパラメータを取得する方法
URLのクエリパラメータには、ページIDや検索条件など、ページの表示内容を動的に変更するための情報が含まれています。PHPでは、$_SERVER変数と$_GET変数を使用することによって、パラメータ情報を簡単に取得できます。
URLパラメータを取得する方法として、以下2つがあります。
- QUERY_STRINGでパラメータ全体を取得する
- $_GET変数で個別のパラメータ値を取得する
それぞれの方法は異なるユースケースに対応しており、目的に応じて使い分けることが大切です。以下では、各取得方法について詳しく解説していきます。
QUERY_STRINGでパラメータ全体を取得する
QUERY_STRINGは、URLの?以降に続くクエリパラメータ部分全体を文字列として返します。複数のパラメータがある場合は、&で連結された状態で取得できます。
<?php
echo $_SERVER['QUERY_STRING'];
// 実行結果例: id=123&category=news&page=2
?>
QUERY_STRINGは、パラメータ全体を別のURLに引き継ぐ場合、ログに記録する場合などに便利です。ただし、文字列形式で取得されるため、個別のパラメータ値を利用するには別途解析が必要になります。
$_GET変数で個別のパラメータ値を取得する
$_GET変数は、URLパラメータを連想配列として格納するスーパーグローバル変数です。パラメータ名をキーとして指定することで、個別の値を直接取得できます。
<?php
// URL例: article.php?id=123&category=news
$article_id = $_GET['id'];
$category = $_GET['category'];
echo "記事ID: " . $article_id . ", カテゴリ: " . $category;
// 実行結果: 記事ID: 123, カテゴリ: news
?>
$_GET変数を使用する際は、存在しないキーにアクセスするとエラーが発生するため、isset関数で事前に存在確認を行うことが推奨されます。また、ユーザーから受け取った値をそのまま使用するとセキュリティリスクがあるため、適切なバリデーションとサニタイズが必要です。
※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。
ITやプログラミングに関するコラム
Pythonのコードはどこに書く?初心者におすすめの場所と実行する手順を解説
Photoshop(フォトショップ)のクリッピングパスとは?切り抜き方法などを詳しく解説
PHPのmb_convert_kanaで全角・半角の変換をする方法
カラーチャートの組み合わせ配色やおすすめツールを解説
【AWS】認定資格12種類の一覧や難易度、費用などを解説
Canvaとは?使い方やアカウント登録などを初心者向けに解説
git configで設定情報を確認・表示する方法
「Pythonはやめとけ」と言われる理由と学習するメリット
Ubuntuのversionを確認する方法
Geminiで画像を生成する方法|ChatGPTとの比較結果も紹介
ITやプログラミングに関するニュース
東京都と東京観光財団が観光事業者向けセミナーを開催、サステナブルツーリズムを解説
株式会社ディーエスブランドが無料ウェビナー開催、生成AIによる業務効率化の実践術を解説
北九州市が事業承継セミナーを開催、後継者不在問題の解決に向け第三者承継を解説
株式会社スマート修繕が無料Webセミナー開催、マンション大規模修繕の談合や事例を解説
法律事務所瀬合パートナーズがウェビナー開催、物流・運送業向け改正下請法の実務対応を解説
IRISデータラボと日本郵便が愛媛香川でセミナー開催、LINE活用で地域特産品の販促を支援
株式会社AがAstreamの解説ウェビナーを開催、インフルエンサーマーケティングの内製化を支援
ホリエモンAI学校がシフト管理効率化ウェビナーを開催、属人化を解消し現場の負担軽減へ
マーケティングアソシエーションが共催ウェビナー開催、売上とLTVを伸ばす勝ちパターンを解説
株式会社fundbookが経営者向けセミナーを開催、M&Aによるライフプランと出口戦略を解説




