1

我正在尝试在运行 Apache2 和 PHP5 的 Linux 上安装 PHP 应用程序。

我注意到,每当我尝试访问应用程序(例如,点击index.php文件)时,浏览器都会返回一个空白页面。运行 aphpinfo()工作正常。

通过测试,我意识到问题出在应用程序的代码中,它丢失了这样的行:

require_once($_SERVER['DOCUMENT_ROOT'] . '/202-config/functions.php');

如果我将其更改为require_once('./202-config/functions.php');,则应用程序运行正常(至少应用程序的那部分。

如果我运行print_r($_SERVER),DOCUMENT_ROOT显示为空。

我的问题是:由于我不想遍历此应用程序中的所有代码并替换这些require_once语句,有没有办法定义 DOCUMENT_ROOT 的值?

谢谢。

4

3 回答 3

6

文档

此数组中的条目由 Web 服务器创建。无法保证每个 Web 服务器都会提供其中任何一个;

此外,如果您从命令行运行脚本,它可能不会被设置。

解决方法是显式设置:

if (!isset($_SERVER['DOCUMENT_ROOT']) || empty($_SERVER['DOCUMENT_ROOT']))
    $_SERVER['DOCUMENT_ROOT'] = __DIR__; //or dirname(__FILE__) for older php verstions

注意:您使用$_SERVER['DOCUMENT_ROOT']包含脚本。所以最好依赖常量__DIR____FILE__不是$_SERVER.

于 2013-02-21T11:06:47.043 回答
1

您是否已DocumentRoot "/var/www"在 Apache-Virtualhost-Config 中设置?在 CLI 中,此字段为空。在这种情况下,您可以手动设置此值:

if ($_SERVER['DOCUMENT_ROOT'] == '') {
  $_SERVER['DOCUMENT_ROOT'] = __DIR__;
}

或 PHP < 5.2

if ($_SERVER['DOCUMENT_ROOT'] == '') {
  $_SERVER['DOCUMENT_ROOT'] = dirname(__FILE__);
}
于 2013-02-21T11:04:27.977 回答
0

You also could do something like this:

if (empty($_SERVER['DOCUMENT_ROOT'])) {
$_SERVER['DOCUMENT_ROOT'] = './';
}

But this is not a nice way

于 2013-02-21T11:08:33.177 回答