如何定义$ _SERVER ['DOCUMENT_ROOT']

时间:2013-02-21 11:01:57

标签: php linux apache

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

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

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

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

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

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

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

感谢。

3 个答案:

答案 0 :(得分:5)

来自docs

  

此阵列中的条目由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

答案 1 :(得分:0)

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

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

或PHP< 5.2

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

答案 2 :(得分:0)

您也可以这样做:

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

但这不是一个好方法