0

次のようなディレクトリ/ファイル ツリーがあります。

index.php

/frame/main_class.php
/frame/func/function_1.php
/frame/func/function_1.php
/cfg/config.php

//index.php

require('frame/main_class.php');
new main_class;

//frame/main_class.php

class main_class{
    public function __construct(){
        require('func/function_1.php');
        require('func/function_2.php');
        require('cfg/config.php');
    }
}

奇妙な部分は、それが機能することです。たぶん遅くて、私はばかげた瞬間を過ごしていますが、「require('cfg/config');」べきではありません。「require('../cfg/config.php');」と書かれています。?

また、index.php のルートを使用している場合は、「require('func/function_1.php');」うまくいかないはずですよね?

リモートサーバーを4回チェックしましたが、おそらく1つか2つの漂遊ファイルがあったと思います...ありません。2 つの require ステートメントが異なるベース パスを持つにはどうすればよいでしょうか.....?

これを引き起こす可能性のあるコードスニペットを知っている人はいますか? 私はいくつかの $_SERVER 変数を使用していますが、それらのいずれも変更していないようです....!?


「ファイルは、指定されたファイル パスに基づいてインクルードされます。ファイル パスが指定されていない場合は、指定された include_path に基づいてインクルードされます。ファイルが include_path で見つからない場合、include は最終的に、呼び出し元のスクリプト自体のディレクトリと現在の作業ディレクトリをチェックインしてから失敗します。 " はっきりと言うとinclude dirname(__FILE__) . '/path/to/file.php';、この混乱を避けることができます。– Dコーダー

「dirname」の PHP マニュアルへのリンク。

4

1 に答える 1

3

PHP エンジンは、要求されたファイルを現在のディレクトリで探しますが、INCLUDE_PATH で定義されたパスのリストでも探します。インクルード パスにスクリプトが実行されている場所からのパスがリストされている場合、指定されたコードは機能します。そうでなければ、それはしません。

そのため、インクルード パスに依存してインクルード ファイルのパスを解決することはお勧めできません。代わりにフル パスを指定する必要があります。

于 2012-11-25T09:13:13.370 に答える