获取 $_SERVER["DOCUMENT_ROOT"] 而不使用 superglobals
get $_SERVER["DOCUMENT_ROOT"] without using superglobals
我是 运行 来自命令行的 PHP 脚本,因此未定义超全局变量。如何在不使用超全局 $_SERVER 的情况下获得 $_SERVER["DOCUMENT_ROOT"]?
当您使用 cli 时,所有服务器变量(和 $_SERVER["DOCUMENT_ROOT"])都没有意义。如果要解析脚本目录,可以使用__DIR__
尚未设置 $_SERVER
等超全局变量(因为 Apache/Nginx/etc)设置这些值。当您从命令行 运行ning 时,没有 Apache/Nginx/etc 来设置它们,因此导致它们变为 NULL
.
您可以使用 2 个备选方案。
使用__DIR__
可以使用magic constant __DIR__
输出当前文件的目录
php -r "echo __DIR__;"
/var/www/html
这将根据您 运行 来源的不同给出不同的结果。即:/var/www/html/lib/foo
将 return 与 运行 与 /var/www/html/views/index
不同。 - 这可能不是您要找的。
设置您自己的常量
在您的 bootstrap 文件 () 中,您可以设置自己的常量以在整个应用程序中使用。
define('__DOCUMENT_ROOT__', __DIR__);
现在从您 运行 的页面中(只要它使用您的 bootstrap 文件),您可以调用 __DOCUMENT_ROOT__
常量来获取 的值会 镜像$_SERVER["DOCUMENT_ROOT"]
。虽然这会要求您使用相对路径来包含您的 bootstrap 文件。
我是 运行 来自命令行的 PHP 脚本,因此未定义超全局变量。如何在不使用超全局 $_SERVER 的情况下获得 $_SERVER["DOCUMENT_ROOT"]?
当您使用 cli 时,所有服务器变量(和 $_SERVER["DOCUMENT_ROOT"])都没有意义。如果要解析脚本目录,可以使用__DIR__
尚未设置 $_SERVER
等超全局变量(因为 Apache/Nginx/etc)设置这些值。当您从命令行 运行ning 时,没有 Apache/Nginx/etc 来设置它们,因此导致它们变为 NULL
.
您可以使用 2 个备选方案。
使用__DIR__
可以使用magic constant __DIR__
输出当前文件的目录
php -r "echo __DIR__;"
/var/www/html
这将根据您 运行 来源的不同给出不同的结果。即:/var/www/html/lib/foo
将 return 与 运行 与 /var/www/html/views/index
不同。 - 这可能不是您要找的。
设置您自己的常量
在您的 bootstrap 文件 (
define('__DOCUMENT_ROOT__', __DIR__);
现在从您 运行 的页面中(只要它使用您的 bootstrap 文件),您可以调用 __DOCUMENT_ROOT__
常量来获取 的值会 镜像$_SERVER["DOCUMENT_ROOT"]
。虽然这会要求您使用相对路径来包含您的 bootstrap 文件。