PHPのディレクトリ変数・定数まとめ

catch
PHPにはディレクトリを取得するための変数や定数が用意されていますが、どれを使えばいいのか分からなくなりませんか?

概要

今回は「example.com」というサイトを例に、ディレクトリ名を取得する変数や定数の値を調査しました。実際の使用例も用意してあります。なお、途中に出てくる dirname() は、引数に指定したファイル・ディレクトリへのパスに対する親ディレクトリのパスを返す関数です。

環境

アクセス先
http://example.com/
http://example.com/knighthawk/
http://example.com/knighthawk/pavehawk.php
ドキュメントルート
/home/mcgee/www/example/public_html/
(/knighthawk/に深い意味はありません。単なるディレクトリ名です。)

一覧

アクセスしたURL http://example.com/ http://example.com/knighthawk/ http://example.com/knighthawk/pavehawk.php
__FILE__ /home/mcgee/www/example/public_html/index.php /home/mcgee/www/example/public_html/knighthawk/index.php /home/mcgee/www/example/public_html/knighthawk/pavehawk.php
__DIR__ /home/mcgee/www/example/public_html /home/mcgee/www/example/public_html/knighthawk /home/mcgee/www/example/public_html/knighthawk
['SERVER_NAME'] example.com
['DOCUMENT_ROOT'] /home/mcgee/www/example/public_html
['SCRIPT_FILENAME'] /home/mcgee/www/example/public_html/index.php /home/mcgee/www/example/public_html/knighthawk/index.php /home/mcgee/www/example/public_html/knighthawk/pavehawk.php
['SCRIPT_NAME'] /index.php /knighthawk/index.php /knighthawk/pavehawk.php
['REQUEST_URI'] / /knighthawk/ /knighthawk/pavehawk.php
['PHP_SELF'] /index.php /knighthawk/index.php /knighthawk/pavehawk.php

項目別

まずはディレクトリ関連の定数です。

__FILE__
ファイルのフルパスとファイル

アクセス先 取得できる値
http://example.com/ /home/mcgee/www/example/public_html/index.php
http://example.com/knighthawk/ /home/mcgee/www/example/public_html/knighthawk/index.php
http://example.com/knighthawk/pavehawk.php /home/mcgee/www/example/public_html/knighthawk/pavehawk.php

__DIR__
ファイルの存在するディレクトリ。dirname(__FILE__) と同じ意味。ルートディレクトリの場合は末尾にスラッシュがつく。

アクセス先 取得できる値
http://example.com/ /home/mcgee/www/example/public_html
http://example.com/knighthawk/ /home/mcgee/www/example/public_html/knighthawk
http://example.com/knighthawk/pavehawk.php /home/mcgee/www/example/public_html/knighthawk

$_SEREVR変数
これはサーバに関する情報が自動で格納される変数(連想配列)です。実際には$_SERVER['PHP_SELF']のように他の連想配列と同じく、キーを指定して使います。

['SERVER_NAME']
現在のスクリプトが実行されているサーバーのホスト名

アクセス先 取得できる値
http://example.com/ example.com
http://example.com/knighthawk/
http://example.com/knighthawk/pavehawk.php

['DOCUMENT_ROOT']
現在実行されているスクリプトが存在するドキュメントルート ディレクトリ

アクセス先 取得できる値
http://example.com/ /home/mcgee/www/example/public_html
http://example.com/knighthawk/
http://example.com/knighthawk/pavehawk.php

['SCRIPT_FILENAME']
現在実行されているスクリプトの絶対パス

アクセス先 取得できる値
http://example.com/ /home/mcgee/www/example/public_html/index.php
http://example.com/knighthawk/ /home/mcgee/www/example/public_html/knighthawk/index.php
http://example.com/knighthawk/pavehawk.php /home/mcgee/www/example/public_html/knighthawk/pavehawk.php

['SCRIPT_NAME']
現在のスクリプトのパス

アクセス先 取得できる値
http://example.com/ /index.php
http://example.com/knighthawk/ /knighthawk/index.php
http://example.com/knighthawk/pavehawk.php /knighthawk/pavehawk.php

['REQUEST_URI']
ページにアクセスするために指定されたURL

アクセス先 取得できる値
http://example.com/ /
http://example.com/knighthawk/ /knighthawk/
http://example.com/knighthawk/pavehawk.php /knighthawk/pavehawk.php

['PHP_SELF']
現在実行しているスクリプトのファイル名。「?id=60」なども含まれる。

アクセス先 取得できる値
http://example.com/ /index.php
http://example.com/knighthawk/ /knighthawk/index.php
http://example.com/knighthawk/pavehawk.php /knighthawk/pavehawk.php

実例

①同じディレクトリにある「blackhawk.php」を Includeしたいとき

include __DIR__ . '/blackhawk.php';

インクルードされるファイルは
/home/mcgee/www/example/public_html/knighthawk/blackhawk.php

②ドキュメントルート直下の「core」ディレクトリにある「seahawk.php」をIncludeしたいとき

include $_SERVER['DOCUMENT_ROOT'] . '/core/seahawk.php';

インクルードされるファイルは
/home/mcgee/www/example/public_html/core/seahawk.php

③TwitterなどのcallbackURLに同じディレクトリの「callback.php」を指定したいとき

$callbackURL = $_SERVER['SERVER_NAME'] . dirname($_SERVER['SCRIPT_NAME']) . '/callback.php';

$callbackURLは
example.com/knighthawk/callback.php

まとめ

注意点は
・__FILE__ __DIR__ のアンダーバーは左右2つずつ
・$_SERVERはキーを指定して使う
・取得できる値には末尾のスラッシュ(/)がない場合が多いので、自分でつける必要がある
ですね。
似たような変数・定数が多いですが、この記事を参考に使いこなして、みなさんが素晴らしいPHPアプリケーションを開発してくださる事を願っています。

参考文献

PHP: 自動的に定義される定数 - Manual
PHP: $_SERVER - Manual
PHP: dirname - Manual

PHPのディレクトリ変数・定数まとめ」への1件のフィードバック

  1. komagawa292 投稿作成者

    「実例」にあるサンプルコード、今まではWordPressの自動整形でアポストロフィーが全角になっていたのですが、アクセスが一気に増えたので頑張って解決策を調べて改善しました。

    返信

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>