有时$_SERVER['DOCUMENT_ROOT']
会返回一个尾随斜杠。在其他环境中则不是这样。这可以在哪里指定?
发布于 2012-03-12 19:37:20
您不能预先说明$_SERVER['DOCUMENT_ROOT']
是否在末尾包含斜杠。
正常情况下,如果配置正确,它不包含尾部斜杠。在Ubuntu (以及其他UNIX)上,正确编写的目录路径末尾没有/
。例如,在windows上,如果配置了apache,它甚至会拒绝启动。在UNIX上,Apache没有那么挑剔,允许使用尾随斜杠。
但是有一个例外,如果您将根目录(/
)作为文档根目录。由于这种情况,您不能预先说明它是否包含尾随斜杠。
在任何情况下,它都包含DocumentRoot
directive的值-带或不带尾部斜杠,就像它已经写入到httpd配置文件中一样。PHP只接收来自apache的值。要获得真正的文档根目录,请使用realpath
和/或有条件地在末尾添加(或删除)斜杠(如果是在配置文件中或在PHP代码中)。
发布于 2012-03-31 20:33:08
我倾向于使用当前目录而不是docroot,因为它在命令行和单元测试中也能很好地工作。我倾向于使用像这样的东西:
require_once(dirname(__FILE__).'/../../../../constants.php');
而不是:
require_once($_SERVER['DOCUMENT_ROOT'].'/../constants.php');
我第一次看到它是在Wordpress源码中,我很喜欢它,但它会导致很多'../‘的重复。
P.S.dirname文件是当前文件,dirname将从末尾剥离/something.php,从而保留包含当前文件的目录的路径。
发布于 2014-06-04 07:35:36
您可以这样做,以确保尾部斜杠始终存在
'/‘..trim($_SERVER’‘DOCUMENT_ROOT’,‘/’).'/‘
require_once( '/'.trim( $_SERVER['DOCUMENT_ROOT'], '/' ).'/'.'constants.php' );
https://stackoverflow.com/questions/9673097
复制