web-dev-qa-db-ja.com

PHPパスのベストプラクティス

私はインターネットのいたるところで、自分のWebサイトのパスを処理するための最良の方法を見つけようとしています。相対パス、絶対パスを使用する必要がありますか?

Dirname([〜#〜] file [〜#〜])が何度か言及されているのを見たことがあります。相対パスに関する問題の1つは、PHPファイルが異なるディレクトリレベルの他のいくつかのファイルに含まれていると、相対パスが破損することです。たとえば、ディレクトリ構造が

Root
    A
    B
       b

そして、a PHP bのファイルとAnはBからの別のファイルを含む場合、Bのファイル内のコードの相対パスは異なります。

したがって、一般に、コード内のインクルードとファイル操作に関してファイルへのパスを処理するための最良の方法は何ですか。

16
Nath5

パスを見つける方法はたくさんありますが、プロジェクトのルート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(); 
?>
14

Zendフレームワークには、インクルードパスの最適化に関するいくつかの優れた指針があります。

http://framework.zend.com/manual/1.10/en/performance.classloading.html

Zendフレームワークを使用していない場合でも、これらは良い指針です。一般的な箇条書きは次のとおりです。

  • 絶対パスを使用する
  • 定義するインクルードパスの数を減らします
  • 現在のディレクトリを最後に定義するか、まったく定義しない
  • Zend Frameworkのinclude_pathをできるだけ早く定義します(Zendを使用しない場合はあまり関係ありません)
0
TheCheese

すべてのインクルードファイルを1つのメインディレクトリに配置できます。次に、構成ファイルまたはスクリプト自体にパス変数を作成します。これは、インクルードディレクトリを指します。

0
Ahatius

ディレクトリ構造に適切な命名規則を使用するための最良の方法、PHPファイルとファイルのクラス名、およびファイルを含めるようにオートローダーを設計する

0
Pete