5

http://php.net/manual/en/function.set-include-path.phpのコメントを熟読する と、「。」、つまりbasename(__FILE__)、は常にPHPのインクルードパスに暗黙的に追加されているように見えます。このパスをバイパスすることは可能ですか?

私の仕事では、独自のインクルーダーとクラスローダーを使用しており、PHPのinclude()の動作を制御したいと思います。私のインクルーダーは絶対パスを強制するために使用されましたが、これは本当に制限が厳しすぎると思います。それに戻したくありません。可能であれば、PHPのinclude_pathを使用したいと思います。

4

2 に答える 2

3

不可能です。include() のドキュメントには次のように書かれています。

于 2010-12-26T15:09:31.450 に答える
0

わかりました、私は確信しています。

get_ini('include_path')私の問題の解決策は、含まれている ごとに繰り返し$fileName、絶対パスに変換してそれに応じて処理することです。私のカスタムインクルードクラスへの変更は最小限です。クラスローダーは変更する必要はありません。

迅速な回答ありがとうございます。

以下は、私のインクルーダー クラスからの関連する更新されたメソッドです: ( $this->includePath は get_ini('include_path') に初期化されます)

// Pre-condition for includeFile()
// checks if $fileName exists in the include path

public function mayIncludeFile($fileName)
{
    if(array_key_exists($fileName, $this->includeMap))
    {
        return TRUE;
    }

    if($fileName{0} == DIRECTORY_SEPARATOR)
    {
        if(is_file($fileName))
        {
            $this->includeMap[$fileName] = $fileName;
            return TRUE;
        }
    }
    else foreach($this->includePath as $index => $path)
    {
        $absoluteFileName = $path . DIRECTORY_SEPARATOR . $fileName;
        if(is_file($absoluteFileName))
        {
            $this->includeMap[$fileName] = $absoluteFileName;
            return TRUE;
        }
    }

    return FALSE;
}

public function includeFile($fileName)
{
    $this->validateFileName($fileName, TRUE);
    if((array_key_exists($fileName, $this->includeMap) && $this->includeMap[$fileName]) ||
        $this->mayIncludeFile($fileName))
    {
        include_once($this->includeMap[$fileName]);
    }
}
于 2010-12-26T15:29:55.530 に答える