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

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

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

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

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

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

【基本編】ドメインとは

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

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

https://www.sejuku.net/

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

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

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

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

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

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

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

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

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

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

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

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

https://www.sejuku.net/blog/73438.php?a=1

ドメインを取得

<?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のドメインの取得方法についてお話しました。

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

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

それでは、また。

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

つぶらや

つぶらや

独学PG&SE、東京在住30代女性。
誰でもプログラマーになれるがモットーで、わかりやすい記事を目指しています。

おすすめコンテンツ

いまならレッスン期間が2週間延長!この秋、プログラミングを学ぼう

転職成功で受講料0円!あなたもプログラミングを学んでエンジニアデビュー