include dirname(__FILE__).'/../../index.php';
ここでの最善の策であり、他のソリューションで発生する可能性のある相対パスのバグのほとんどを回避できます。
実際、インクルードは、このコードが配置されている現在のスクリプトの位置に対して常に相対的になるように強制されます (アプリケーションのアーキテクチャを定義するため、この位置はおそらく安定しています)。include '../../index.php'
これは、実行中の (「呼び出し」とも呼ばれる) スクリプトに対して相対的にインクルードし、現在の作業ディレクトリに対して相対的にインクルードすることとは異なります。これは、インクルードされたスクリプトのパスから解決するのではなく、スクリプトを含む親スクリプトを指します。 .
PHPドキュメントから:
ファイルは、指定されたファイル パスに基づいてインクルードされます。何も指定されていない場合は、指定された include_path に基づいてインクルードされます。ファイルが include_path に見つからない場合、include は失敗する前に呼び出しスクリプト自身のディレクトリと現在の作業ディレクトリを最終的にチェックインします。
そして、このトリックを引用している私が見つけた最も古い投稿は、Tapken による 2003 年にさかのぼります。
次のセットアップでテストできます。
次のようなレイアウトを作成します。
htdocs
¦ parent.php
¦ goal.php
¦
+---sub
¦ included.php
¦ goal.php
にparent.php
、次のように入力します。
<?php
include dirname(__FILE__).'/sub/included.php';
?>
にsub/included.php
、次のように入力します。
<?php
print("WRONG : " . realpath('goal.php'));
print("GOOD : " . realpath(dirname(__FILE__).'/goal.php'));
?>
アクセス時の結果parent.php
:
WRONG : X:\htdocs\goal.php
GOOD : X:\htdocs\sub\goal.php
ご覧のとおり、最初のケースでは、パスは呼び出し元のスクリプトから解決されますが、トリックparent.php
を使用して、コードが配置されているスクリプトからインクルードが行われます。dirname(__FILE__).'/path'
included.php
他の場所で読むことができるものとは対照的に、次のトリックは上記のトリックと同等ではないことに注意してください。
include '/../../index.php';
実際、プリペンドは機能しますが、呼び出しスクリプトと/
同じように解決されます (違いは、失敗した場合に後で検索されないことです)。PHPドキュメントから:include ../../index.php
include_path
絶対パス (Windows ではドライブ文字または \、Unix/Linux システムでは / で始まる) または現在のディレクトリに対する相対パス (. または .. で始まる) が定義されている場合、include_path は完全に無視されます。