私はインターネットのいたるところで、自分のWebサイトのパスを処理するための最良の方法を見つけようとしています。相対パス、絶対パスを使用する必要がありますか?
Dirname([〜#〜] file [〜#〜])が何度か言及されているのを見たことがあります。相対パスに関する問題の1つは、PHPファイルが異なるディレクトリレベルの他のいくつかのファイルに含まれていると、相対パスが破損することです。たとえば、ディレクトリ構造が
Root
A
B
b
そして、a PHP bのファイルとAnはBからの別のファイルを含む場合、Bのファイル内のコードの相対パスは異なります。
したがって、一般に、コード内のインクルードとファイル操作に関してファイルへのパスを処理するための最良の方法は何ですか。
パスを見つける方法はたくさんありますが、プロジェクトのルートindex.php
またはconfig
のファイル内で定数を定義するのが常に最も簡単だと思います。次に、インクルード/クラスローダーなどにSITE_ROOT
を使用し、ビュー、コントローラー、リダイレクトなどにSITE_URL
を使用できます。
<?php
$root=pathinfo($_SERVER['SCRIPT_FILENAME']);
define ('BASE_FOLDER', basename($root['dirname']));
define ('SITE_ROOT', realpath(dirname(__FILE__)));
define ('SITE_URL', 'http://'.$_SERVER['HTTP_Host'].'/'.BASE_FOLDER);
?>
<?php
function __autoload($class_name) {
include (SITE_ROOT.'/includes/'.$class_name.'.php');
}
$obj = new MyClass1();
$obj2 = new MyClass2();
?>
Zendフレームワークには、インクルードパスの最適化に関するいくつかの優れた指針があります。
http://framework.zend.com/manual/1.10/en/performance.classloading.html
Zendフレームワークを使用していない場合でも、これらは良い指針です。一般的な箇条書きは次のとおりです。
すべてのインクルードファイルを1つのメインディレクトリに配置できます。次に、構成ファイルまたはスクリプト自体にパス変数を作成します。これは、インクルードディレクトリを指します。
ディレクトリ構造に適切な命名規則を使用するための最良の方法、PHPファイルとファイルのクラス名、およびファイルを含めるようにオートローダーを設計する