こんにちは!独学プログラマー&ライターのつぶらやです。
PHPで開発をしていると、以下のような事を考える事があります。
URLのドメインを知りたい
今アクセスしているPHPファイルのURLの一部を取得したい。
今回はそんな悩みを持った場合の解決方法を、以下の内容でお話します。
【基本編】ドメインとは
【実践編】$_SERVER変数でドメインを取得
【番外編】parse_url関数でURLを分解
【基本編】ドメインとは
ドメインとはインターネット上の住所を示すURLの一部です。
以下の侍エンジニアのURLを使って説明します。
上記の【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のドメインの取得方法についてお話しました。
どんな情報でも自在に取得して加工して使用できるように、知識を積み上げてください。
それが、いつかどこかで役に立つときが来ると思います。
それでは、また。