获取 $_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 文件。