不是$ _SERVER [PHP]中可用的所有标题

时间:2013-03-13 10:15:40

标签: php apache

我有一些自定义标题,在$_SERVER中无法显示,但在帮助apache_request_headers()时可见。

此问题仅存在于一个基于Windows的Apache版本(OpenServer)中。在Mac和Linux上,Apache将所有标头传递给php,我可以在$_SERVER变量中看到它...也许对Windows有一些限制?或者apache.conf中是否有任何设置可以激活将所有标题传递给mod_php?

2 个答案:

答案 0 :(得分:4)

当PHP在Windows上作为Apache模块运行时,您将看不到$ _SERVER autoglobal array上的所有标头。

您必须使用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()。

http://php.net/manual/en/function.getallheaders.php

答案 1 :(得分:0)

来自PHP文档:http://php.net/manual/en/reserved.variables.server.php

在评论中,请注意:

在Windows IIS 7上,您必须使用$ _SERVER ['LOCAL_ADDR']而不是$ _SERVER ['SERVER_ADDR']来获取服务器的IP地址。

似乎某些变量名在Windows中是不同的,因此您必须找到它们。如果您仔细查看文档注释,可以使用其中一些解决方法