ホームページ > php教程 > php手册 > PHPのパス問題の解決策

PHPのパス問題の解決策

WBOY
リリース: 2016-06-13 12:44:27
オリジナル
1121 人が閲覧しました


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

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

原則:
相対パスを使用しますが、相対パス内では絶対パスを使用します (少し複雑ですが、後で詳しく説明します)。第一に、移植性が保証され、第二に、簡単に変更できます。 、定式化され、明確に構造化されているため、簡単に拡張できます。

手順の詳細な説明:
まず、プログラムのルート ディレクトリを決定します。ただし、一般的には、それが 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 に一度定義するだけで十分です。プログラム全体に、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 でパスがどのように定義されているかを参照することもできます。

これは変更に応じて変更されない定型的な計画です。より良い計画がある場合は、お気軽に議論してください。わからないことがあれば、お気軽にお尋ねください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート