6

ルートディレクトリに戻るためのより良い方法を学ぼうとしています。$_SERVERを使用するのが最も安全な方法ではないと聞きました。もっと良い方法があるかどうか疑問に思います。だから私はURLexample.com/exp/my.phpでこのようなものを得ることができました

これが私が得たものです。

include ($_SERVER['DOCUMENT_ROOT'].'/cpages/cmain/func/init.php');
include($_SERVER['DOCUMENT_ROOT'].'/cpages/toppart.php');
include($_SERVER['DOCUMENT_ROOT'].'/cpages/boxes/image.php');
include($_SERVER['DOCUMENT_ROOT'].'/cpages/bottonpart.php');

に変更します

define ('DOCUMENT_ROOT', dirname(__FILE__));
include (DOCUMENT_ROOT.'/cpages/cmain/func/init.php');
include(DOCUMENT_ROOT.'/cpages/toppart.php');
include(DOCUMENT_ROOT.'/cpages/boxes/image.php');
include(DOCUMENT_ROOT.'/cpages/bottonpart.php');

しかし今それは私にエラーを与えています

Warning: include(C:\xampp\htdocs\backbone\image/cpages/cmain/func/init.php)

エラーがそれを修正する方法であると($_SERVER['DOCUMENT_ROOT']私に教えてくれませんでしたか?

4

1 に答える 1

4

問題は、$ _ SERVER配列内の何かに依存できないことです。これは、あらゆる種類の値を取得できる可能性があるためです。

したがって、次のルールが必要になります。

  1. パブリックコードを作成する場合は、パスを構成ファイルに入れます。次に、$ _ SERVERがユーザーのサーバー上で正しくない場合、ユーザーはそれを上書きできます。いくつかの簡単なルールを使用したい場合は、を使用して構成を事前に完了するのに役立ちDOCUMENT_ROOTます(以下を参照)。

  2. 1つまたは2つのサーバー間をホップするだけの独自のコードを作成する場合DOCUMENT_ROOTは、正しいと想定し、サーバーを移動する必要がある場合はrwwriteします。


DOCUMENT_ROOT構成変数を事前コンパイルする場合にデフォルトを提供する方法。

  1. Apacheで、を確認しCONTEXT_DOCUMENT_ROOTます。DOCUMENT_ROOTほとんどの場合安全ですが、間違っている可能性のある場所がいくつかあります。これは、提供したリンクの場合です。apacheがmod_aliasまたはmoduser_dirを使用している場合。このような場合は、CONTEXT_DOCUMENT_ROOTどちらが安全かを使用する必要があります。ただし、ApacheはCONTEXT_DOCUMENT_ROOT1か月ほどしか追加されていないため、最新のインストールがない限り、にフォールバックする必要があることに注意してくださいDOCUMENT_ROOT
  2. DOCUMENT_ROOT- 上記を参照
  3. PATH_TRANSLATED(の長さより短い)を使用PHP_SELFして、現在の作業ディレクトリへのパスを作成します。
  4. SCRIPT_FILE_NAME(の長さより短い)を使用PHP_SELFして、現在の作業ディレクトリへのパスを作成します。
  5. __DIR__ 現在の作業ディレクトリへのグローバル変数を使用します

次に、それらの詳細がわかったら、そのディレクトリに存在することがわかっているファイルを確認します。存在する場合は、おそらく正しいパスを取得しています。そうでない場合は、次のものを試してください。

于 2012-09-11T06:39:20.077 に答える