phpファイル間の相互参照パス問題の一般的な処理方法

2977 ワード

基礎知識
  
/             ,          
                  ,                
             ,            
        :
     ./           
     ../          
     /          
      /root/first/second
        /      /root    
      ./first    first           /root/fiest
           ../second     /root/first/second
                     。

他のウェブプログラミング言語では相対パスは、phpではそうではなく、現在の処理ファイルディレクトリを基準としています.phpにおける相対パスは,現在の作業ディレクトリを基準とし,現在の処理ファイルディレクトリを基準としないため,開発過程において多くのトラブルをもたらす.例えば問題が発生します
aaa
      a.php
      bbb
            b.php
            b1.php
            ccc
                 c.php
以上のディレクトリのc.phpではrequire(../b 1.php)、a.phpではrequire(bbb/ccc/c.php)のようにエラーが発生します.a.phpでは../中探b 1.php、b 1が見つからない.phpファイルを間違って報告し、上記の引用問題を解決する一般的な方法は2つあります.
 
一、a.phpにdefine('ROOT_PATH',dirname(_FILE_));
あとはrequire ROOT_PATH/bbb/ccc/c.php
    
二、ルートディレクトリの下に新しいファイルglobalを作成する.phpは、chdir(dirname(_FILE_))を含むコンテンツである.
このglobalは各ファイルに表示されます.phpが含まれています.
 
以上のように、aファイルが非同ディレクトリのbファイルを参照し、このaファイルが非同ディレクトリのcファイルで参照される場合、aファイルにdirname(_FILE_)を用いるにbファイルを含めます.そうしないと、cファイルを実行するときにbファイルが見つからないと報告されます.
補足:
5、次の文を使用すると、現在のディレクトリを現在のファイルのディレクトリパスに設定することができ、特にクロスリファレンスの場合に便利です.
chdir(dirname(__FILE__));
6、仮想ホストを使用するユーザーに対してファイルを含む前にset_を使用することができるinclude_path()関数:
set_include_path(‘./’.PATH_SEPARATOR.dirname(__FILE__));
require_once(‘include/cfg.php’);
7、phpプロファイルのinclude_の設定を補助するpathパラメータによるクエリーパス、include_pathとは、使用するファイルを含むディレクトリを指し、常にincludeファイルを統一したディレクトリに配置し、このディレクトリをプロファイルphpに設定することができる.iniのinclude_pathパラメータの後に、これらの含むファイルを使用する必要がある場合は、その名前だけを含める必要があります.たとえば、metsky_cfg.phpファイルは設定されたファイルディレクトリに存在します.
付PHP.iniファイルのinclude_path部分の内容:
;;;;;;;;;;;;;;;;;;;;;;;;; ; Paths and Directories ; ;;;;;;;;;;;;;;;;;;;;;;;;; ; UNIX: "/path1:/path2";include_path = ".:/php/includes"; ; Windows: "\path1;\path2";include_path = ".;c:\php\includes"; ; PHP's default setting for include_path is ".;/path/to/php/pear"; http://php.net/include-path include_path = ".;D:\xampp\php\PEAR"; The root of the PHP pages, used only if nonempty. ; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root ; if you are running php as a CGI under any web server (other than IIS) ; see documentation for security issues.  The alternate is to use the ; cgi.force_redirect configuration below ; http://php.net/doc-root doc_root = ; The directory under which PHP opens the script using/~username used only ; if nonempty. ; http://php.net/user-dir user_dir = ; Directory in which the loadable extensions (modules) reside. ; http://php.net/extension-dir ; extension_dir = "./"; On windows: ; extension_dir = "ext"extension_dir = "D:\xampp\php\ext"......
8、通過するhtaccessプロファイルのパス変更は、前のような効果も得られます.たとえば、
php_value include_path "./include"
プロセス中のHTMLパスのエラーはルートディレクトリの下のパスに変更する必要があります