PHPのドメインに強くなる!簡単取得で一発理解

こんにちは!独学プログラマー&ライターのつぶらやです。

PHPで開発をしていると、以下のような事を考える事があります。

URLのドメインを知りたい
今アクセスしているPHPファイルのURLの一部を取得したい。

今回はそんな悩みを持った場合の解決方法を、以下の内容でお話します。

【基本編】ドメインとは
【実践編】$_SERVER変数でドメインを取得
【番外編】parse_url関数でURLを分解

目次

【基本編】ドメインとは

ドメインとはインターネット上の住所を示すURLの一部です。

以下の侍エンジニアのURLを使って説明します。

侍エンジニア
侍エンジニア | プログラミングスクールで日本初の専属マンツーマン指導 SAMURAI ENGINEER(侍エンジニア)は日本初の専属マンツーマン指導が特徴のプログラミングスクールです。あなただけのオリジナルカリキュラムで最適な学習が可能。徹底した...

上記の【sejuku.net】の部分がドメインです。

因みに【www】はホスト名です。

次章からURLの中のドメインを取得するため方法、ドメイン以外のURLの情報を取得する方法を解説します。

【実践編】$_SERVERでドメインを取得

$_SERVERというのは、スーパーグローバル変数です。

スーパーグローバル変数というのは、PHPを実行した時に自動的に定義されており、すべてのスコープで使用 = どこからでも呼び出せます。[su_spacer size=”10″]

$_SERVER以外にスーパーグローバル変数には以下のような種類があります。

$_SERVER
$_POST
$_GET
$_COOKIE
$_FILES
$_REQUEST
$_SESSION

$_SERVERは、PHPが動いているサーバーの情報を持っています。

サーバーの情報というのは、ヘッダ情報やパス情報などです。

それでは$_SERVERを使用して、ドメインを取得する方法を紹介していきます。

例としてこの記事のURLをアレンジした以下のURLを使用して解説します。

侍エンジニアブログ

ドメインを取得

<?php
echo $_SERVER['SERVER_NAME'];
?>
結果
sejuku.net

$_SERVER[‘SERVER_NAME’]でドメインを取得する事が出来ました。

ホストを取得

<?php
echo $_SERVER['HTTP_HOST'];
?>
結果
www

$_SERVER[‘HTTP_HOST’]でホスト名を取得する事ができました。

ただ、一つ注意して頂きたい事があります。

使用している環境によっては$_SERVER[‘HTTP_HOST’]は$_SERVER[‘SERVER_NAME’]と値が同じだったり、片方しか取得できない場合があります。

違いは以下のようになっています。

$_SERVER[‘SERVER_NAME’]・・・Webサーバー側で保持しているホスト名
$_SERVER[‘HTTP_HOST’]・・・ブラウザからのリクエストされるホスト名

利用している環境がどういう表示がされるかを確認する必要があります。

ドメイン以外のURL情報を取得

ドメイン以外のURLの情報を取得したい場合もあると思います。

解説していきます。

ドメインより後の情報

?以降のクエリ文字(サーバに送信するための情報)も取得します。

<?php
echo $_SERVER['REQUEST_URI'];
?>
結果
/blog/73438.php?a=1

$_SERVER[‘REQUEST_URI’]でクエリ文字を取得する事が出来ました。

ドメインを除く、ファイルパスとファイル名

?以降のクエリ文字は取得されません。

<?php
echo $_SERVER['SCRIPT_NAME'];
?>
結果
/blog/73438.php

$_SERVER[‘SCRIPT_NAME’]でファイルパスとファイル名を取得する事が出来ました。

クエリ文字だけ表示

?は含まず取得されます。

<?php
echo $_SERVER['QUERY_STRING'];
?>
結果
a=1

$_SERVER[‘QUERY_STRING’]でファイルパスとファイル名を取得する事が出来ました。

【番外編】parse_url関数でURLを分解

$_SERVERを使用する以外にparse_url関数を使ってURLを分解する方法です。

第二引数に色々な指定ができるので、以下のように一括で出してみました。

コメントに取得結果を記載しています。

$urlに設定しているのは、この記事でずっと例に使用してきたURLです。

<?php
$url = 'https://www.sejuku.net/blog/73438.php?a=1';

var_dump(parse_url($url));
/* 結果①
array(4) { 
    ["scheme"]=> string(5) "https" 
    ["host"]=> string(14) "www.sejuku.net" 
    ["path"]=> string(15) "/blog/73438.php" 
    ["query"]=> string(3) "a=1" 
} 
*/

var_dump(parse_url($url, PHP_URL_SCHEME)); // 結果②https

var_dump(parse_url($url, PHP_URL_USER)); // 結果③NULL

var_dump(parse_url($url, PHP_URL_PASS)); // 結果④NULL

var_dump(parse_url($url, PHP_URL_HOST)); // 結果⑤www.sejuku.net

var_dump(parse_url($url, PHP_URL_PORT)); // 結果⑥NULL

var_dump(parse_url($url, PHP_URL_PATH)); // 結果⑦/blog/73438.php

var_dump(parse_url($url, PHP_URL_QUERY)); // 結果⑧a=1

var_dump(parse_url($url, PHP_URL_FRAGMENT)); // 結果⑨NULL

?>

ドメイン名取得としては、結果⑤のPHP_URL_HOSTを引数に設定した場合が該当します。

【www.sejuku.net】が取得できました。

しかし$_SERVER[‘SERVER_NAME’]や$_SERVER[‘HTTP_HOST’]で取得した時と違い、ホスト名とドメイン名が一緒に取得されてしまいました。

ドメイン名だけを取得したい場合には使用できませんね。

ファイルパスや、クエリ文字を取得する時には使用できると思いますので、記憶の片隅に置いてください。

↓parse_url関数についての公式のサイトURLです。

http://php.net/manual/ja/function.parse-url.php

まとめ

今回はPHPのドメインの取得方法についてお話しました。

どんな情報でも自在に取得して加工して使用できるように、知識を積み上げてください。

それが、いつかどこかで役に立つときが来ると思います。

それでは、また。

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次