我有一些自定义标题,它在 中不可见$_SERVER
,但在 help中可见apache_request_headers()
。
而这样的问题只存在于一个基于 Windows 的 Apache 版本(OpenServer)中。在 Mac 和 Linux 上,Apache 将所有标头传递给 php,我可以在$_SERVER
变量中看到它......也许对 windows 有一些限制?或者 apache.conf 中是否有任何设置可以激活将所有标头传递给 mod_php ?
当 PHP 在 Windows 上作为 Apache 模块运行时,您不会在 $_SERVER 自动全局数组上看到所有标题。
您必须使用 apache_request_headers() 检索它们。您可以使用一些代码来获得跨平台部署:
function GetHeader($myheader) {
if (isset($_SERVER[$myheader])) {
return $_SERVER[$myheader];
} else {
$headers = apache_request_headers();
if (isset($headers[$myheader])) {
return $headers[$myheader];
}
}
return '';
}
如果你的 PHP 足够新,你也可以试试 getallheaders()。
来自 PHP 文档: http: //php.net/manual/en/reserved.variables.server.php
在评论中,请注意:
在 Windows IIS 7 上,您必须使用 $_SERVER['LOCAL_ADDR'] 而不是 $_SERVER['SERVER_ADDR'] 来获取服务器的 IP 地址。
似乎有些变量名在windows中是不同的,所以你必须找出它们。如果您仔细查看文档注释,其中一些有一些解决方法
php $_SERVER
是奇怪的更好的选择是使用apache_request_headers()
但是,如果您仍然想使用 $_SERVER
addHTTP_
和 replace all -
to_
并且最后一件事要记住,如果请求标头有_
,那么它根本不会被解析(丢失)