PHPで現在のURLを取得する方法を簡単に解説

PHPで現在のURLを取得する方法を簡単に解説

公開: 更新:
CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座


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やプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプが提供する無料で学べるプログラミングスクール講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア 配属3ヶ月で30%の生産性向上を実現するいよぎんコンピュータサービスの新人研修に迫る - IT・プログラミングを知って学べるコネクトメディア 金融業界の業務効率化を加速するニッセイアセットマネジメントの生成AI×GAS活用研修事例 - IT・プログラミングを知って学べるコネクトメディア 【製造業のDX人材育成事例】デジタル人材の即戦力化を実現する、日本ガイシ株式会社の異動者向オンボーディング研修 - ITやプログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する