2012-03-12 36 views
6

場合によっては$_SERVER['DOCUMENT_ROOT']が末尾にスラッシュを返します。他の環境ではそうではありません。これはどこで指定できますか?

+1

*指定することができますか?どのようなサーバーが異なる環境で動作していますか? –

+2

'$ _SERVER [ 'DOCUMENT_ROOT'] = sprintfのは( '%sの/'、RTRIM($ _、SERVER [ 'DOCUMENT_ROOT']、 '/'));' –

+0

@AlixAxelは、RTRIMはまた、潜在的空白をトリムではないでしょうか?ドキュメントルートに空白がある場合はどうなりますか? – CMCDragonkai

答えて

10

$_SERVER['DOCUMENT_ROOT']に最後にスラッシュが含まれているかどうかを前もって言い表すことはできません。

通常、正しく構成されている場合はではなく、にスラッシュが含まれています。 Ubuntuでは(他のUNIXと同様に)、ディレクトリに正しく書き込まれたパスには、最後に/がありません。たとえば、Windowsの場合、apacheは設定されていれば起動を拒否します。 UNIXでは、Apacheはそれほど厄介ではなく、末尾にスラッシュをつけることができます。

ルートディレクトリ(/)をドキュメントルートにする場合は例外が1つあります。このケースのために、後にスラッシュが含まれているかどうかは事前に言えません。

いずれにしても、httpd構成ファイルに書き込まれたように末尾にスラッシュを付けたものも含めて、DocumentRoot directiveの値を含んでいます。 PHPはApacheの値を引き継ぎます。実際のドキュメントルートを取得するには、コンフィギュレーションファイルまたはPHPコードのいずれかにある場合は、を使用し、最後に条件付きでスラッシュ(または削除)を追加します。

+0

情報が本当に助けてくれてありがとう、私は同じ問題を解決するために 'Real_Path'を使いました – Hitesh

1

ウェブルートがテールスラッシュの有無にかかわらず定義されている場合は、サーバーの設定に依存すると思います。これがすべてのシステムで等しいことを単に確認してください。

ApacheのドキュメントのServerRoot-Directiveも参照してください。

4

コマンドラインや単体テストでもうまく動作するので、私は現在のディレクトリをdocrootよりも使用する傾向があります。私はWordpressのソースで最初にそれを見て、非常にそれが好き、それは「../」の繰り返しの多くにつながることができます

require_once($_SERVER['DOCUMENT_ROOT'].'/../constants.php'); 

require_once(dirname(__FILE__).'/../../../../constants.php'); 

むしろより:私のようなものを使用する傾向があります。

P.S. FILEは現在のファイルであり、dirnameは/something.phpを最後から削除し、現在のファイルを含むディレクトリのパスを残します。あなたが最後のスラッシュが

'/' は常に存在していることを確認するために、次のように行うことができます

2

。トリム([ 'DOCUMENT_ROOT'] $ _SERVERを、 '/')。 '/'

require_once('/'.trim($_SERVER['DOCUMENT_ROOT'], '/').'/'.'constants.php'); 
0

ハクの答えが正しいです。私は、異なる状況、コンソールスクリプト、またはWebサーバーでincludeを使用しようとしました。私の最善の策はDOCUMENT_ROOTで始まる絶対パスを使用することでした。 しかし、私はまだその後ろのスラッシュのために立ち往生していました。ここ は良い解決策になると思われるものである:

のinclude_once のgetenv( "DOCUMENT_ROOT")「./ WEB-INF /クラスは

その後からPHPのtest.phpをしてスクリプトを起動します。バッチスクリプトを実行し、DOCUMENT_ROOT env変数に値を入力します。スラッシュの後ろにスラッシュを付けます。 Apacheからロードされたとき、getenvは既に埋め込まれています。

PHPエンジンは././で管理でき、./と同じことを伝えます。同じように、htdocs./にはhtdocs /(ウィンドウ下)があります。

0

古い質問ですが、私はこれを解決する方法を私に与えてくれたので、ここで私の解決方法を追加します。 $ _SERVER ['DOCUMENT_ROOT']で定数(ROOTPATH)を定義し、末尾にスラッシュ(DIRECTORY_SEPARATOR)が付いていることを確認します。

define('ROOTPATH', (ctype_alnum(substr($_SERVER['DOCUMENT_ROOT'], -1)) ? $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR : $_SERVER['DOCUMENT_ROOT'])); 

これは(私は特別な文字で終わる多くのフォルダ名を見て覚えていませんでした)フォルダ名の最後の文字は英数字で想定しています。 あなたは必ず末尾がないようにしたい場合は、このような何かで行くことができスラッシュ:

define('ROOTPATH', (!ctype_alnum(substr($_SERVER['DOCUMENT_ROOT'], -1)) ? substr($_SERVER['DOCUMENT_ROOT'], 0, -1) : $_SERVER['DOCUMENT_ROOT'])); 

平和、Moの

0

仮想ホストを使用する場合は、Apacheは$_SERVER['DOCUMENT_ROOT']へのDocumentRootの値を書き込み、仮想ホスト。だからそこに後ろにスラッシュを書くことができます。

しかし、あなたのアプリケーションがそれに頼るべきではありませんし、支援なしスラッシュをtrailngの有無を判断しなければならないので、別のホスティング事業者が異なっこのparamenterを扱うので、それは良い決断ではありません。

関連する問題