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.phpで require_once しているfunctions.phpはlib/functions.phpではなかったということです。
これはどういうことかというと、おおもとのmain.phpの階層を基準としているということですね。こんな風に同名ファイルをインクルードするときは、相対パスでは思わぬ不具合につながることがあります。
// lib/settings.php
require_once __DIR__ . '/functions.php';
そこで、このようにすればsettings.phpと同階層のfunctions.phpを呼び出すことができます。