当我在localhost上运行此代码时
$root = $_SERVER['DOCUMENT_ROOT'];
echo "Doc root : $root <br />";
它回应:
Doc root : C:/wamp/public_html/
当我在远程服务器上运行相同的代码时,它会响应:
Doc root : /home/setine5/public_html
请注意,它没有尾随“/”
我正在尝试找到一种在我的localhost和远程服务器上引用同一块PHP的方法但由于缺少正斜杠而无法使用。
这是如何正常完成的?
答案 0 :(得分:1)
如果$_SERVER['DOCUMENT_ROOT']
最后是否包含斜杠,则不能提前说出来。它根据环境而有所不同。在大多数情况下,它没有尾随/
,但在Windows中,尾部斜杠会导致问题。
正如Dave建议的那样,这里的解决方案是在不存在的情况下追加尾部斜杠。
$_SERVER['DOCUMENT_ROOT'] = sprintf('%s/', rtrim($_SERVER['DOCUMENT_ROOT'], '/'));
另一种解决方案:
$_SERVER['DOCUMENT_ROOT'] .= (substr($_SERVER['DOCUMENT_ROOT'], -1) == '/')?'':'/';
希望这有帮助!
答案 1 :(得分:1)
我建议您不要使用$_SERVER['DOCUMENT_ROOT']
来指定文件位置。但是在前端控制器中使用__DIR__
或dirname(__FILE__) // For PHP version < 5.3
来确定它所在的位置,然后使用相对于文件的前端控制器路径。
这将更直观,更容易理解。这种做法在许多优秀的框架和CMS中使用。