PHPのドキュメントとここにある他の投稿から収集したものから、PHPのinclude(およびinclude_once)は次のことを行います。
ファイルは、指定されたファイルパスに基づいてインクルードされます。指定されていない場合は、include_pathが指定されます。ファイルがinclude_pathに見つからない場合、includeは、失敗する前に、呼び出し元のスクリプト自体のディレクトリと現在の作業ディレクトリを最終的にチェックインします。
特定のディレクトリに次の構造があります。
- index.php
- / dirA(a.phpとb.phpを含む)
- / dirB(c.phpを含む)
index.phpから include_once "dirA/a.php"
a.php内で機能するものは次のとおりです。
include_once "b.php"
include_once "dirB/c.php"
a.php内から機能しないものは次のとおりです。
include_once "b.php"
include_once "../dirB/c.php"
私にとって不思議なことに、b.phpは「呼び出し元のスクリプト自体のディレクトリ」に関連して含まれていますが、c.phpは現在の作業ディレクトリ(index.phpを含むディレクトリ)に関連してのみ考慮されます。これは私には少し矛盾しているようです。PHPは、呼び出し元のスクリプトに関連するファイルをインクルードしますが、インクルードパスに含まれている場合はインクルードしません../
-なぜですか? 親ディレクトリディレクティブが呼び出し元のスクリプトに対して機能しないのに、現在の作業ディレクトリに対しては機能するのはなぜですか?../
(注:cwdと比較してテストしましたが、クリーンに保つために上記の例にはそのファイルを含めませんでした。問題なく動作しました)
誰かがこれがなぜであるかについていくつかの光を当てることができますか? それはこのように機能する必要がありますか、それともこれはバグですか?