$_SERVER["DOCUMENT_ROOT"] 在运行PHP的IIS上存在变量?我以前认为此变量是特定于Apache的,在IIS上,您必须通过字符串操纵来模拟它 SCRIPT_NAMESCRIPT_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根并将其设置为我自己的变量之一来解决它。

<?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();
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top