2011-01-02 27 views
2

$_SERVER["DOCUMENT_ROOT"]変数はPHPを実行しているIIS上に存在しますか?以前はこの変数はApache固有のものだと思っていましたが、IIS上ではSCRIPT_NAMESCRIPT_FILENAMEの文字列操作でエミュレートする必要がありましたが、IIS上のPHPインストールでこの変数が表示されます。この変数は常にIISで使用できると想定するのは安全ですか?PHP-IISのドキュメントルート変数

答えて

0

doc rootは常にIISで使用できると想定するのは安全ですか?いや...

$ _SERVER [「DOCUMENT_ROOT」]はIIS上で常に利用可能ではない..ですそれは設定ファイルで設定する必要があります...

それは、サーバー上に構成されている場合「でした」ちょうどあなたの設定ファイルが変更されないことを確認してください...それを使用する -

+0

設定ファイル= php.iniなど? –

+0

私はphp.iniでdoc_root(その部分のパスの下)を設定することができます...しかし、それはグローバルなdoc_rootを設定します... – CarpeNoctumDC

+0

ちょうどGoogle検索を行いました:http://forums.iis.net/p/1154314 /1932457.aspx doc_rootと複数のサイトのいくつかの問題の概要を紹介しています...下に向かって、いくつかのリンクを参照しています... 1つのサイトだけが問題ではない場合... – CarpeNoctumDC

1

IISが常に設定されていません...そう、あなたのスクリプトを中断します$ _SERVER [「DOCUMENT_ROOT」]あなたが設定するにはどうすればよい

それは設定ファイルにあるので、残りのコードはApacheサーバのように動作しますか?

出力の$ _SERVERは、あなたが使用することができるかもしれないことを与えられているかを確認する:

echo "<br>_SERVER:<br><pre>"; 
print_r($_SERVER); 
echo "</pre><br><br>_ENV:<br><pre>"; 
print_r($_ENV); 
echo "</pre><br><br>"; 

をこの場合、SCRIPT_FILENAMEとSCRIPT_NAMEが設定されています。

DOCUMENT_ROOTを取得するために与えられているものを使用するには、以下のコードを変更します。

if (!isset($_SERVER['DOCUMENT_ROOT']) || $_SERVER['DOCUMENT_ROOT'] === '') { 
    $_SERVER['DOCUMENT_ROOT'] = substr($_SERVER['SCRIPT_FILENAME'], 0, -strlen($_SERVER['SCRIPT_NAME'])); 
    putenv('DOCUMENT_ROOT='.$_SERVER['DOCUMENT_ROOT']); 
} 

今、あなたは通常、$ _SERVER [「DOCUMENT_ROOT」]を使用することができます。

$docroot = getenv("DOCUMENT_ROOT"); 
include_once "$docroot/folder/yourfile.php"; 
0

私は単純に参照することによってそれを解決私のWebルート、それを私自身の変数の1つとして設定します。

<?php 
echo getcwd(); 
chdir('/'); 
echo getcwd(); 
chdir('/example-web-server'); 
echo getcwd(); 
?> 

次のコードは、PHPの現在の作業ディレクトリを取得します。このディレクトリは、実行しているファイルを含むディレクトリになります。 chdir('/')はPHPが動作できるところであればどこでも、私の場合はC:\のルートに行きます。私のWebサーバーのWebルートの例はC:\example-web-serverですので、PHPでこれを次のように参照できます: /example-web-server

PHPのパスを取得したら、それを変数として設定して呼び出すことができます。私はC:\example-web-server\testing\index.phpinclude()の例を使用します:

<?php 
$webroot = "/example-web-server"; 
include("{$webroot}/testing/index.php"); 
?> 

私は、これは古いスレッドですけど、私は、このためのソリューションを必要とするだけにすることはできません。

関連する問題