MENU

PHPで現在のURLやディレクトリの絶対パスを取得する

ファイルのインクルードは少し注意が必要なので、それも合わせて紹介していきたいと思います。$_SERVER 変数やマジック定数を使って、URLやディレクトリパスを取得します。

URL


$url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
echo $url;

ディレクトリパス


echo dirname(__FILE__);

// PHP5.3.0以上なら
echo __DIR__;

ディレクトリパスの使いどころ


main.php
functions.php
lib/
 ├─ settings.php
 └─ functions.php

// main.php
require_once 'lib/settings.php';

// functions.php
echo 'functions.phpが呼び出されました';

// lib/settings.php
require_once 'functions.php';

// lib/functions.php
echo 'lib/functions.phpが呼び出されました';

それぞれのPHPファイルにこのように記述してみます。そして、main.phpを実行してみると、functions.phpが呼び出されましたとなります。settings.phprequire_once しているfunctions.phplib/functions.phpではなかったということです。

これはどういうことかというと、おおもとのmain.phpの階層を基準としているということですね。こんな風に同名ファイルをインクルードするときは、相対パスでは思わぬ不具合につながることがあります。


// lib/settings.php
require_once __DIR__ . '/functions.php';

そこで、このようにすればsettings.phpと同階層のfunctions.phpを呼び出すことができます。