ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルのパスの問題の解決策

PHP_PHP チュートリアルのパスの問題の解決策

WBOY
WBOYオリジナル
2016-07-21 16:09:06999ブラウズ


PHPのパス問題の解決策 はじめに:
PERL と PHP のインクルード パスは常に解決が難しい問題であり、主にオペレーティング システムと WEB サーバーに関連しています。このパスの問題を非常にインテリジェントに解決することは不可能です。 PERL と比較すると、PHP のパスははるかに優れており、解決がはるかに簡単です。これは、特定のステートメントで絶対パスを使用する必要がある PERL とは異なり、PHP の相対パスは PHP プログラムのあらゆる場面で使用できるため、移植が非常に複雑になります。 。

これに基づいて、以下で説明するように、PHP で絶対的に確実なソリューションを設計しました。

原則:
相対パスを使用しますが、相対パス内では絶対パスを使用します (詳細は後で説明します)。第 1 に、移植性が確保されます。第 3 に、形式的であり、拡張しやすい明確な構造。

手順の詳細な説明: 1. まず、プログラムのルート ディレクトリを決定します。ただし、一般的には、その下のサブディレクトリの相対パスであることに注意してください。ディレクトリは 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 を定義する必要があることですが、各ディレクトリは 1 回だけ定義する必要があることです。このディレクトリの settings.php だけで十分です。プログラム全体に、index.php などのエントリ ファイルが 1 つだけあり、他のすべてのファイルがこの唯一のエントリ ファイルに直接または間接的に含まれている場合は、index.php が存在するディレクトリに settings.php を追加するだけで済みます。一度だけでOKです。 Delphi プロジェクトを実行し、プロジェクト ファイルを研究した友人がいる場合は、プログラムにメイン エントリ ファイルが 1 つしかないという先ほど述べた状況が Delphi プロジェクトとよく似ていることがわかるでしょう。Delphi にはメイン プログラム ファイル (dpr) が 1 つしかないためです。 file) 、残りはすべてユニット ファイルまたはリソース ファイルであり、単独で実行することはできません。 PHP では、この状況が発生した場合、APPROOT を 1 回定義し、メイン プログラム ファイルの最初の文に require_once('settings.php'); を記述するだけで、後続のすべてのインクルードを含めることができます (APPROOT.$ パス)。 ; 、この「プログラムのルートディレクトリからの相対ファイルの絶対パスを含む」$path を書かない限り、問題が起こらないことは保証されています。

私はこの方法を複数回使用しましたが、結果は非常に良好です。また、JSP の WEB-INFO でパスがどのように定義されているかを参照することもできます。

これは定型的な計画であり、変更はなく、あらゆる変化に適応します。もっと良い計画がある場合は、お気軽に相談してください。わからないことがあれば、遠慮なく聞いてください。

http://www.bkjia.com/PHPjc/314623.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/314623.html技術記事 PHP におけるパスの問題の解決策の紹介: PERL および PHP におけるインクルージョン パスは、主にオペレーティング システムと WEB サーバーに関連するため、常に解決が困難です。非常に賢明であることは不可能です...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。