在不使用superglobals的情况下获取$ _SERVER [“DOCUMENT_ROOT”]

时间:2015-06-25 11:06:36

标签: php document-root

我正在从命令行运行PHP脚本,因此未定义超级全局。如何在不使用超全球$ _SERVER的情况下获得$ _SERVER [“DOCUMENT_ROOT”]?

2 个答案:

答案 0 :(得分:1)

此类$_SERVER尚未设置的超级全局(因为Apache / Nginx / etc)设置了这些值。当您从命令行运行时,没有Apache / Nginx / etc来设置它们,从而导致它们变为NULL

您可以使用2种替代方案。

使用__DIR__

您可以使用magic constant __DIR__输出当前文件的目录。

php -r "echo __DIR__;"
/var/www/html

这将根据您运行它的位置给出不同的结果。即:如果您从/var/www/html/lib/foo运行它,/var/www/html/views/index将以不同的方式返回。 - 这可能不是你想要的。

设置自己的常量

在您的引导程序文件(as mentioned in this comment)中,您可以设置自己的常量以在整个应用程序中使用。

define('__DOCUMENT_ROOT__', __DIR__);

现在,从您运行的页面中(只要它使用您的引导程序文件),您可以调用__DOCUMENT_ROOT__常量来获取 镜像$_SERVER["DOCUMENT_ROOT"]的值。虽然这需要您使用相对路径来包含引导程序文件。

答案 1 :(得分:0)

使用cli时,所有服务器变量(和$ _SERVER [“DOCUMENT_ROOT”])都没有意义。如果要解析脚本目录,可以使用__DIR__