PHPでincludeの時、ファイルパスの指示の仕方。

PHPで、include したファイルを include した時、ファイルパスをどうすべきでしょうか。
基本は、最初に実行されたファイルからの相対パスか、絶対パスで指示します。
下図の例では、b.php 内の include のパス指示は、a.php からの相対パスになります。

includeパス指示説明図

ディレクトリ構成例

ファイルの内容

a.php の内容
include('2/b.php');

b.php の内容 (例1)
include('../2/3/c.php');

b.php の内容 (例2)
include('3/c.php');

b.php の内容 (例3)
include('./3/c.php');

b.php の内容 (例4)
include('/./3/c.php');

なので、c.php (2) を include したければ、(例1)のようにします。
(例2)(例3)(例4)にすると、c.php (1) を include してしまいます。

ここからちょっとややこしいのですが、もし c.php (1) が存在しなければ、(例2)(例4)では、c.php (2) を include します。
そして、(例3)では、指定した場所にファイルがないとして warning を発行します。

この動作は、PHPマニュアルに下記のように書いてあリます。
「ファイルのインクルードは、指定されたパスから行います。パスを指定しない場合は、 include_path の設定を利用します。 ファイルが include_path に見つからないときは、include は呼び出し元スクリプトのディレクトリと現在の作業ディレクトリも探します。 include は、ファイルを見つけられない場合に warning を発行します。」

要するに、(例2)(例4)では、呼び出し元スクリプトのディレクトリにファイルがなかったので作業ディレクトリを探して c.php (2) を include したということです。

で、実際の使用では b.php をどこから include しても c.php (2) を include したいことが多いと思います。
なので、多くのサイトで書かれている下記のように書くのが良いと思います。

b.php
include(dirname(__FILE__) . '/c.php'); //PHPのバージョンが5.3.0より前
include(__DIR__ . '/c.php'); //phpのバージョンが5.3.0以降のみ

上の例を説明すると、b.php が存在しているディレクトリの絶対パスを取得して、c.php (2) のパスを絶対パスで指示するようにしています。
ここでの絶対パスとは、フルパスの事で、ドキュメントルート(サイトルート)からのパスではありません。

  • 人気ブログランキングへ
  • FC2ランキングへ
  • ブログランキング・にほんブログ村へ
  • おきてがみ

関連記事

カテゴリー:PHP
タグ: , ,

3 個のコメント

  1. Posted 2014年9月11日 at 12:09 AM | Permalink

    php: PHPでincludeの時、ファイルパスの指示の仕方。 | WEBデザイン&WEBプログラミング -sei2の日記- http://t.co/EQtcvck45t

  2. Posted 2014年9月11日 at 12:35 AM | Permalink

    PHPでincludeの時、ファイルパスの指示の仕方。 | WEBデザイン&WEBプログラミング -sei2の日記-

    PHPで、include したファイルを include した時、ファイルパスをどうすべきでしょうか… http://t.co/9EnpRFkwoO

  3. aaaa
    Posted 2015年5月31日 at 1:08 AM | Permalink

    最後のb.phpって
    include(__DIR__ . ‘/3/c.php’); //phpのバージョンが5.3.0以降のみ
    が正しい?

コメントを残す