者
:
ロングネットプロ
PERL と PHP のインクルード パスは、主にオペレーティング システムと WEB サーバーに関連する常に難しい問題であり、このパスの問題を非常にインテリジェントに解決することは不可能です。 PERL と比較すると、PHP のパスははるかに優れており、解決がはるかに簡単です。これは、特定のステートメントで絶対パスを使用する必要がある PERL とは異なり、PHP の相対パスは PHP プログラムのあらゆる場面で使用できるため、移植が非常に複雑になります。 。
これに基づいて、以下に説明するように、PHP で絶対確実なソリューションを設計しました。
原則として:
相対パスを使用しますが、相対パス内では絶対パスを使用します (詳細は後で説明します)。第 1 に、移植性が確保されます。第 3 に、形式的で明確な構造を持ち、簡単です。拡大します。
詳細な手順:
1. まず、プログラムのルート ディレクトリを決定します。これは、WEB サーバーの仮想ディレクトリではなく、ファイル システムの下にあることに注意してください。ただし、そのディレクトリの下のサブディレクトリの相対パスは、通常、そのディレクトリの下の仮想サブディレクトリと同じです。のURL。
2. 定義したプログラムのルート ディレクトリの下の各サブディレクトリに settings.php を作成し (必要に応じて実際にはすべてではありません)、その中に次のような変数または定数を定義します (スコープが大きいため、定数の方が適しています)。 APPROOT ですが、この APPROOT は絶対パスではなく、指定したプログラム ルート ディレクトリを基準としたディレクトリの相対パスです。
3. このディレクトリ内のすべてのプログラム エントリ ファイル (つまり、他のファイルを含む最初のファイル、またはブラウザで直接参照できるファイル) の最初の文に require_once('settings.php'); を記述します。この文をすべてのインクルード ファイルに追加しないことをお勧めします。実際、 if(!define(APPROOT)) define(APPROOT, '../. .'); と記述できるため、追加しても問題ありません。このタイプのステートメントは再定義を妨げます。
4. 他のファイルを直接的または間接的にインクルードする場合は、 include(APPROOT.$path); と記述できます。$path は、指定したプログラム ルート ディレクトリを基準としたインクルード ファイルの絶対パスです。
原理:
決定されるプログラム ルート ディレクトリは相対パスですが、特定のディレクトリの場所はそのルート ディレクトリに対する絶対パスです。この 2 つの組み合わせが、プログラム ルート ディレクトリに対する特定のファイルの相対パスになります。たとえば、ディレクトリ c:wwwrootapp は指定したプログラムのルート ディレクトリで、c:wwwrootappaindex.php と c:wwwrootappbinc.php の 2 つのファイルがあります。 。サブディレクトリ a の場合、APPROOT は '..'、プログラム ルート ディレクトリの場合、inc.php の絶対パスは $path='/b/inc.php' で、この 2 つの組み合わせは '../b /inc.php」。 inc.phpをindex.phpに含めたい場合はinclude('../b/inc.php');と書かないといけないのですが、このパスは先ほど結合したAPPROOT.$pathではないでしょうか?
結論は:
上記の処理の後、各パスは完全に整然とした均一なものになります。少し面倒な唯一の点は、APPROOT を各ディレクトリに定義する必要があることですが、各ディレクトリの settings.php で定義する必要があるのは 1 回だけです。ディレクトリ。プログラム全体に、index.php などのエントリ ファイルが 1 つだけあり、他のすべてのファイルがこの唯一のエントリ ファイルに直接または間接的に含まれている場合は、index.php が存在するディレクトリに settings.php を追加するだけで済みます。一度だけでOKです。友人が Delphi プロジェクトを実行してプロジェクト ファイルを研究した場合、プログラムにはメイン エントリ ファイルが 1 つしかないという先ほど述べた状況が Delphi プロジェクトとよく似ていることに気づくでしょう。Delphi にはメイン プログラム ファイル (dpr) が 1 つしかないからです。 file) 、残りはすべてユニット ファイルまたはリソース ファイルであり、単独で実行することはできません。 PHP では、この状況が発生した場合、APPROOT を 1 回定義し、メイン プログラム ファイルの最初の文に require_once('settings.php'); を記述するだけで、後続のすべてのインクルードで include(APPROOT.$ path) を使用できます。 ; 、この「プログラムのルートディレクトリからの相対ファイルの絶対パスを含む」$path を書かない限り、問題が起こらないことは保証されています。
私はこの方法を複数回使用しましたが、良い結果が得られました。また、JSP の WEB-INFO でパスがどのように定義されているかを参照することもできます。
これは常に変化する変化に対応する定型的な計画です。より良い計画がある場合は、お気軽にご相談ください。わからないことがあれば、お気軽にお尋ねください。