我正在从命令行运行PHP脚本,因此未定义超级全局。如何在不使用超全球$ _SERVER的情况下获得$ _SERVER [“DOCUMENT_ROOT”]?
答案 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__