2011-01-12 16 views
0

ここでは愚かな質問があります。ファイルAがファイルBのインクルード()を行い、ファイルBがファイルCのインクルードを行い、すべてのパスが相対パスである場合、 '子'参照はそれぞれのパスまたは 'マスター'ファイルファイルA)が含まれていますか?例えばphp require() - リアルパス

ディレクトリ構造

ルート

header.html(ファイルB)

/画像/logo.png(ファイルC)

/サイト/index.phpを(ファイルA)

のindex.phpが含まれています は( '../ header.html')が含ま;

header.html contains: include( 'images/logo.png');

これは機能しますか?または、index.phpは「マスター」ファイルなので、「sites」フォルダ内の「images」を検索しようとしますか?

答えて

1

これらは常に「マスター」ファイルに関連しています。インクルードされたファイルは、メインスクリプトのソースコードの "注入"として扱われるため、メインスクリプトの内部にあるかのように動作します。私が見常に彼らがしているファイルを指す__FILE____DIR__定数を使用し、実際の現在のファイルへの相対何かに対処するために

+0

+1で '__DIR__'を指摘しても有効です(私はその部分を恥知らずに私の答えに統合しました)。 – Oswald

+0

大丈夫、ありがとう! – dtj

1

パスは作業ディレクトリからの相対パスです。最初の作業ディレクトリは、HTTPリクエスト(すなわち、マスターファイルを呼び出したもの)に応じて直接実行されたPHPファイルを含むディレクトリです。

includeは作業ディレクトリを変更しませんが、chdirを使用して手動で変更できます。しかし、私は、includeのためだけに作業ディレクトリを変更するようアドバイスしています。

set_include_pathまたはそれに対応する構成オプションを使用したり、Pekkaが提案したように、__DIR__を使用して、現在のファイルのディレクトリを基準にしてファイル名を構成してください。

+0

ああ。ありがとう! – dtj

+0

+1 "作業ディレクトリ"の原則はPHP –