問題の説明
まず、例のディレクトリ構造とこれら3つのファイルの内容を見てみましょう。
a.php
<?phpinclude './c/d.php'
b.php
<?phpdefine( '__ b'、 'これはテスト');
c/d.php
<?phpinclude '../b.php';var_dump(__b);
Cディレクトリの下のD.PHPファイルは、上部ディレクトリの下のb.phpファイルを参照しています。 C/D.PHPを個別に実行しても問題はありません。
ただし、a.phpがbと同じディレクトリでc/d.phpを参照する場合、問題が発生します。
ファイルが存在しないというエラーを報告します
考える
一般的な意味は、a.phpがc/d.phpをa.phpに導入した後、パスinclude '../b.php' 、a.phpの相対パスが存在しないため、この問題は存在します。
ファイルが複数の場所で参照される可能性がある場合、問題が発生するのは非常に簡単であり、絶対パスを使用してこの問題を簡単に解決できます。
絶対パスを使用して問題を解決します
ファイルを次のように変更した場合
a.php
<?phpinclude __dir __。 '/../b.php'; var_dump(__ b);
b.php
<?phpdefine( '__ b'、 'これはテスト');
c/d.php
<?phpinclude __dir __。 '/../b.php'; var_dump(__ b);
これは、ファイルの絶対パスを参照するように変更されます。 __DIR__は、php5.3に存在していた事前定義された魔法の定数であり、ファイルがあるディレクトリを示しています。次に、これを使用して絶対パスを書きます。これは、A.PhpおよびC/D.Phpを実行するときに正常に実行できます。 dirname(__FILE__)がphp5.3の前に__DIR___の代わりに使用されている場合
要約します
上記は、PHPにおける相対パスの問題と絶対パスの使用に関するすべてです。 PHPを使用しているすべての人に役立ち、PHPの相対パスのピットに再び入らないようにすることを願っています。