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

时间:2015-04-27 11:49:48

标签: php filter scope superglobals

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

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

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

现在我已经过滤了$doc_root我每次想要使用它时都会从$_SERVER超全球阵列重新过滤吗?或者,我应该在函数内部声明global $doc_root然后使用它(或者更好的做法是引用$GLOBALS数组吗?)?

1 个答案:

答案 0 :(得分:1)

使用superglobals本身并不错。但是你应该在代码的深处避免它们,因为这会增加对环境的隐藏依赖性并使代码更难以测试。

因此,如果您担心这个隐藏的依赖关系,您应该使用前端控制器中的值并使用它注入类中。或者,如果您正在使用DI容器,则可以定义返回此值的服务。

使用filter_input函数根本没有帮助 - 它只是隐藏了超全局访问。

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