如何在 PHP 中安全有效地引用 $_SERVER['DOCUMENT_ROOT']

How to reference $_SERVER['DOCUMENT_ROOT'] safely and efficiently in PHP

为了避免使用超全局变量,我似乎必须使用这样的东西:

$doc_root = filter_input(INPUT_SERVER, 'DOCUMENT_ROOT');

获取文档根目录。但是如果没有指定过滤器,这只是 FILTER_UNSAFE_RAW ...要使用什么过滤器,是否有预定义的路径过滤器,或者我是否需要使用正则表达式制作自己的过滤器。

现在我已经过滤了 $doc_root 是否每次要使用它时都从 $_SERVER 超全局数组中重新过滤?或者,我应该在函数内部声明 global $doc_root 然后使用它(或者实际上引用 $GLOBALS 数组更好吗?)?

使用超全局变量本身就不错。但是您应该避免在代码中深入使用它们,因为这会增加对环境的隐藏依赖性并使代码更难测试。

因此,如果您担心这种隐藏的依赖关系,您应该在前端控制器中获取值并使用它注入到 class 中。或者,如果您使用的是 DI 容器,则可以定义 returns 此值的服务。

使用 filter_input 函数在这里一点帮助都没有——它只是隐藏了超全局访问。

也许更安全的选择确实是使用 __DIR__ 常量。