我正在尝试在运行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的值?
感谢。
答案 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'] = './';
}
但这不是一个好方法