什么是_SERVER [“CONTEXT_PREFIX”]

时间:2012-08-26 10:41:43

标签: php

phpinfo()显示名为_SERVER["CONTEXT_PREFIX"]的变量。 http://www.php.net/manual/en/reserved.variables.server.php没有记录 究竟是什么?我在哪里可以找到有关所有$_SERVER[*]变量的文档?该列表中还有一些不在php.net网页上。

修改
我从评论中看到,这可能与服务器有关。我在Windows上使用UniServer堆栈,但由于这不可靠,我不会依赖此密钥存在。

是否有99%的时间存在哪些键的列表(即,在所有可能的设置中)?

2 个答案:

答案 0 :(得分:8)

根据6月28日的源代码控制,它似乎是Apache 2.3.13中的新功能。还有CONTEXT_DOCUMENT_ROOT,这看起来更容易理解。

“引入新的context_document_root和context_prefix,它提供有关非全局URI到目录映射(例如从mod_userdir或mod_alias)到脚本的信息。”资料来源:http://marc.info/?l=apache-cvs&m=130928191414740

它来自Apache,与您在请求URI和不同目录之间可以有不同映射的时间有关,例如当您使用http://example.com/~username访问“用户名”的网站空间下的网站时,实际的文档根目录会有所不同。

如果您为一个URI指定多个目录源,我认为它会有用的地方,例如:

Userdir public_html /usr/web 

然后你永远不确定这些文件是在“public_html”还是“/ usr / web”(因为它首先尝试一个,然后是另一个),所以CONTEXT_DOCUMENT_ROOT和CONTEXT_PREFIX可以帮助你找到它。

看不到任何关于它的正式文档,因为文档中似乎已跳过2.3(http://httpd.apache.org/docs/


编辑:评论已经回答了你的另一部分关于你可以依赖的服务器变量(不可能说)。如果您发现“上下文”变量满足您的需求,那么您可能需要编写一个函数,说明“如果它们存在,请使用它们,但如果不存在,请使用另一个”。

一个常见的例子就是当你尝试(不可靠,我知道)获得源协议时。在搜索HTTPS ='on'之前,您将首先检查代理添加的标头(X_FORWARDED_PROTO)。如果环境变量恰好在您的服务器上,则可能需要执行类似操作。

答案 1 :(得分:1)

这不是$ _SERVER全局的默认PHP密钥。

您可以查看$_SERVER全局变量的PHP手册:

http://php.net/manual/en/reserved.variables.server.php

编辑:(注意粗体句子)

  

$ _ SERVER是一个包含标题,路径等信息的数组,   和脚本位置。此数组中的条目由Web创建   服务器。 无法保证每个Web服务器都会提供任何服务   这些;服务器可能会省略某些服务器,或提供此处未列出的其他服务器。   也就是说,大量的这些变量都在计算中   »CGI / 1.1规范,因此您应该能够期待这些。