0

ドキュメントが見つからない奇妙な問題があります。サーバーの次の場所にページがあります。

{SITE_ROOT}/admin/myfolder/myfile.php

このファイルは、インクルードを使用して、サーバーのルートにあるグローバル構成ファイルを実行します。これは、それ自体に対して相対的に行われます。

// {SITE_ROOT}/admin/myfolder/myfile.php
// includes {SITE_ROOT}/config.php    See below explanation after edit
include('../config.php);

これは、次の .htaccess ファイルを myfolder ディレクトリに追加するまでは正常に機能します

// {SITE_ROOT}/admin/myfolder/.htaccess
RewriteEngine On
RewriteRule ^([0-9A-Z]+)\.gif$ gif_generator.php?gifid=$1 [L]

このルールの目的は重要ではありません。実際には、上記のページ (myfile.php) はこのルールの影響を受けるべきではありません (私が間違っていない限り、正規表現と一致するべきではありません。おそらくそうなる可能性があります)。 . しかし、このルールを使用すると、myfile.php 内の include() が失敗するようです。RewriteEngine が有効になっているため、php ファイルの現在の作業ディレクトリが変更されたかのようです。

これはどこかに文書化されていますか?また、これを防ぐ方法はありますか?

編集- かなり重要なものを見逃しました。元のファイル ({SITE_ROOT}/admin/myfolder/myfile.php) は、次の場所 ({SITE_ROOT}/admin/frontcontroller.php) にあるファイルに含まれています。myfile.php のインクルード パスは、実際にはこのファイルに対して相対的です。これを反映するために上記の質問を変更しました。

4

1 に答える 1

0

多分これはあなたにとって便利です:

dirname(__FILE__)

ファイルがあるディレクトリを返します。したがって、サイトのディレクトリ構造がわかっている場合は、次のようなものを使用できます

dirname(dirname(__FILE__))

使用することもできます

DIRECTORY_SEPARATOR

サーバーOSに固有のディレクトリセパレーターを取得する

あなたの場合、これは次のようになります

include(rtrim(dirname(dirname(__FILE__)),'/\\').DIRECTORY_SEPARATOR.'config.php')
于 2011-07-15T10:00:30.060 に答える