运行PHP的IIS上是否存在$_SERVER["DOCUMENT_ROOT"]
变量?之前我认为这个变量是Apache特有的,在IIS上,你必须通过SCRIPT_NAME
和SCRIPT_FILENAME
变量的字符串操作来模拟它,但我现在在IIS上的PHP安装上看到这个变量。假设此变量在IIS上始终可用是否安全。
答案 0 :(得分: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";
答案 1 :(得分:0)
假设在IIS中始终可以使用doc root是否安全?不......
$ _ SERVER ['DOCUMENT_ROOT']在IIS上并不总是可用..它必须在配置文件中设置...
如果在您的服务器上配置了它,您可以'使用它...只需确保您的配置文件不会更改 - 否则您将破坏您的脚本......
答案 2 :(得分:0)
我通过简单地引用我的网络根目录并将其设置为我自己的变量之一来解决它。
<?php
echo getcwd();
chdir('/');
echo getcwd();
chdir('/example-web-server');
echo getcwd();
?>
以下代码获取PHP的当前工作目录,该目录将是包含您正在运行此文件的文件的目录。 chdir('/')
在我的案例C:\
中找到了PHP可以运行的任何地方的根。我的示例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");
?>
我知道这是一个旧线程,但我不能成为唯一需要解决此问题的人。
答案 3 :(得分:0)
这是我在index.php上所做的事情:
if(!isset($_SERVER["DOCUMENT_ROOT"]))
{
$_SERVER["DOCUMENT_ROOT"]=getcwd();
}