【问题标题】:How to get a working DOCUMENT_ROOT value on IIS server?如何在 IIS 服务器上获取有效的 DOCUMENT_ROOT 值?
【发布时间】:2019-04-10 03:08:46
【问题描述】:

我一直在使用 Linux 服务器,我认为我 98% 的开发时间都在使用。我或多或少是第一次将代码放到某个 IIS 服务器上。

我在 Linux Env​​ 上工作,所以一切都按我的预期工作,但是到了 IIS 服务器,一切都崩溃了。我会为大家节省大量关于 IIS 和 Windows 为何如此糟糕的咆哮,并解决手头的问题。

在我的环境中使用$_SERVER['DOCUMENT_ROOT'] 会输出如下值:

/var/www/project

这有利于包含文件,例如

require_once $_SERVER['DOCUMENT_ROOT']. '/app/connect.php';

但是,在 IIS 上出现以下错误消息:

没有这样的文件或目录

这让我在代码前面加上了这个:

echo '<pre>'. print_r($_SERVER['DOCUMENT_ROOT'], 1) .'</pre>';

输出这个:

C:\inetpub\wwwroot

100% 与实际网站无关。

我应该使用 IIS 特定的变量来包含我的脚本吗?当包含根本不理想的文件时,它似乎对我的所有代码都有巨大的连锁反应。在一个梦幻世界中,我的代码不会用 10 英尺长的杆子接触 IIS,但不幸的是它必须在上面运行。

如何在我的代码中设置站点的根目录?

【问题讨论】:

标签: php iis document-root


【解决方案1】:

对我来说不幸的是,IIS 服务器不在我的控制范围内,因此我无法真正寻找篡改服务器设置的解决方案。但是我确实设法找到了解决方案:

我放在了我的 header.php 模板文件中:

echo '<pre>'. print_r(exec('CHDIR'), 1) .'</pre>';

这给了我一个看起来像这样的值:

C:\www\mysite

这与$_SERVER['DOCUMENT_ROOT'] 的输出有很大不同。

我创建了一个条件来区分服务器操作系统并根据值设置一个新变量:

if (strpos(PHP_OS, 'Linux') > -1) {
    $root = $_SERVER['DOCUMENT_ROOT'];
    $feRoot = '/';
} else {
    $root = 'C:\\www\\mysite';
    $feRoot = 'http://mysite';
}

现在我可以这样调用我的脚本 ($DS = DIRECTORY_SEPRARTOR):

require_once $root. $DS .'app'. $DS .'connect.php';

然后像这样调用我的前端资产:

<link rel="stylesheet" href="<?php echo $feRoot; ?>/css/file.css" />

所以 IIS 的关键是绝对处理而不是相对于DOCUMENT_ROOT

【讨论】:

    猜你喜欢
    • 2014-02-16
    • 2023-03-04
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    相关资源
    最近更新 更多