4

我有一些自定义标题,它在 中不可见$_SERVER,但在 help中可见apache_request_headers()

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

4

3 回答 3

4

当 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()。

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

于 2013-03-13T13:12:30.960 回答
0

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

在评论中,请注意:

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

似乎有些变量名在windows中是不同的,所以你必须找出它们。如果您仔细查看文档注释,其中一些有一些解决方法

于 2013-03-13T12:31:51.070 回答
0

php $_SERVER是奇怪的更好的选择是使用apache_request_headers()

但是,如果您仍然想使用 $_SERVERaddHTTP_和 replace all -to_并且最后一件事要记住,如果请求标头有_,那么它根本不会被解析(丢失)

于 2022-03-04T07:17:50.383 回答