What is _SERVER["CONTEXT_PREFIX"]


What is _SERVER["CONTEXT_PREFIX"]

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

编辑
我从评论中看到,这可能与服务器有关。我在windows上使用UniServer堆栈,但由于这是不可靠的,我不会依赖于该密钥的存在。

有没有列出99%的时间(也就是说,在所有可能的设置中)都存在哪些关键点?

根据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访问"username"的web空间下的网站,因此实际的文档根目录会有所不同。

我认为,如果您为一个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)。如果环境变量恰好位于服务器上,则可能需要执行类似操作。

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

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

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

编辑:(注意加粗的句子)

$SERVER是包含诸如报头、路径等信息的数组,以及脚本位置。此数组中的条目由web创建服务器不能保证每个web服务器都会提供其中;服务器可以省略一些,或者提供此处未列出的其他服务器也就是说,在»CGI/1.1规范,所以你应该能够期待这些。