PHP-IISのドキュメントルート変数
-
14-10-2019 - |
質問
どうしますか $_SERVER["DOCUMENT_ROOT"]
PHPを実行しているIISに変数が存在しますか?以前は、この変数はApache固有であり、IISでは、文字列の操作によってそれをエミュレートする必要があると思いました SCRIPT_NAME
と SCRIPT_FILENAME
変数ですが、IISのPHPインストールにこの変数が表示されました。この変数が常にIISで利用可能であると仮定するのは安全ですか?
解決
Doc Rootが常にIISで利用可能であると想定しても安全ですか?いいえ...
$ _SERVER ['Document_Root']は常にIISで利用できるとは限りません。
サーバーで構成されている場合は、使用できます。構成ファイルが変更されないことを確認してください。
他のヒント
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";
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のパスを取得したら、変数として設定して呼び出すことができます。の例を使用します include()
の C:\example-web-server\testing\index.php
:
<?php
$webroot = "/example-web-server";
include("{$webroot}/testing/index.php");
?>
私はこれが古いスレッドであることを知っていますが、これに解決策を必要とするのは私だけではありません。
これは私がindex.phpの上でしたことです:
if(!isset($_SERVER["DOCUMENT_ROOT"]))
{
$_SERVER["DOCUMENT_ROOT"]=getcwd();
}