PHP インクルード相対パスの混乱
相対パスから PHP ファイルをインクルードしようとすると、開発者はインクルードを設定しているにもかかわらず、予期しないエラーが発生する可能性がありますパスを正しく。この記事では、このようなエラーの潜在的な原因を詳しく調べ、DIR および dirname 定数を使用した解決策を提供します。
問題:
ユーザーのコード構造には、/root/connect.php と /root/update/test.php の 2 つのファイルが含まれています。 connect.php は、config.php が /root にあると仮定して、「../config.php」を含めようとします。ただし、test.php は connect.php をインクルードし、インクルード パスを「.:/root」に設定します。これにより、理論的には /root から ../config.php をインクルードできるようになります。
エラー:
正しいインクルード パスが設定されているにもかかわらず、コードは config.php の検索に失敗し、ファイルが存在しないことを示す PHP 警告をスローします。 存在する。 config.php への相対パス (/root/config.php) が確立されたインクルード パス内にあるため、これは複雑です。
解決策:
この問題を解決するには、PHP の相対パスの動作を理解する必要があります。 include は相対パスをサポートしますが、開始点は常に include ステートメントを実行しているファイルの現在のディレクトリになります。この場合、connect.php は /root/connect.php で実行されるため、「../config.php」をインクルードしようとすると、config が含まれていないディレクトリ /root/connect.php/ が検索されます。 .php.
この制限を克服するには、DIR 定数を使用して現在のファイルのディレクトリを参照できます。ファイル名を DIR に連結すると、目的のファイルへの絶対パスが得られます。
ソリューションを使用したコード:
connect.php:
include(dirname(__DIR__).'/config.php');
このコードは絶対パスを使用しますdirname(__DIR__).'/config.php' に config.php を含め、現在のディレクトリに関係なく確実に見つかるようにします。
Test.php:
set_include_path(".:/root"); include "connect.php";
この変更により、test.php は connect.php を正常にインクルードし、さらにその正しいバージョンから config.php をインクルードするようになります。 location.
結論:
相対パスの動作を理解し、DIR と dirname 定数を利用することで、開発者は相対パスからファイルを正確にインクルードできるようになります。複雑なディレクトリ構造を扱う場合でも。
以上がインクルード パスが正しいにもかかわらず、PHP インクルードが失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。