$_SERVER["DOCUMENT_ROOT"]
运行 PHP 的 IIS 上是否存在该变量?早些时候我认为这个变量是 Apache 特定的,在 IIS 上,你必须通过字符串操作SCRIPT_NAME
和SCRIPT_FILENAME
变量来模拟它,但我现在在 IIS 上的 PHP 安装中看到了这个变量。假设此变量在 IIS 上始终可用是否安全。
4 回答
IIS 并不总是设置 $_SERVER['DOCUMENT_ROOT']
你如何在配置文件中设置它,所以你的其余代码就像在 Apache 服务器上一样工作?
输出 $_SERVER 以查看您可以使用的 IS:
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";
假设 doc root 在 IIS 中始终可用是否安全?不...
$_SERVER['DOCUMENT_ROOT'] 在 IIS 上并不总是可用。它必须在配置文件中设置...
如果它是在您的服务器上配置的,您“可以”使用它...只要确保您的配置文件不会更改 - 否则您将破坏您的脚本...
我通过简单地引用我的网络根目录并将其设置为我自己的变量之一来解决它。
<?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()
我将使用of的一个示例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();
}