8

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

编辑
我从评论中看到这可能取决于服务器。我在 Windows 上使用 UniServer 堆栈,但由于这不可靠,我不会依赖此密钥是否存在。

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

4

2 回答 2

9

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

我认为如果您为一个 URI 指定多个目录源,它会派上用场,例如:

Userdir public_html /usr/web 

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

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


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

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

于 2012-08-26T11:15:15.940 回答
1

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

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

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

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

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

于 2012-08-26T10:55:57.250 回答