PHP getallheaders 替代

Posted

技术标签:

【中文标题】PHP getallheaders 替代【英文标题】:PHP getallheaders alternative 【发布时间】:2011-08-26 06:39:40 【问题描述】:

我正在尝试在我的服务器上从 apache 切换到 nginx。这里唯一的问题是我在 php 脚本中使用的 getallheaders() 函数不适用于 Nginx。我已经尝试过用户在 getallheaders finction 上的 php 站点上贡献了注释,但这并没有返回所有请求标头。

请告诉我如何解决这个问题。我真的很想切换到 Nginx。

【问题讨论】:

您缺少哪些标题?您确定您缺少的标头确实是请求标头而不是 apache 设置的内容吗? 我缺少客户端发送的自定义标头,例如我的应用需要 ownet-id 字段,如果没有 getallheaders 就无法访问。 它在 PHP 5.4 FastCGI 上可用。 【参考方案1】:

你仍然可以使用它,但你必须像这里一样重新定义/重写它

http://www.php.net/manual/en/function.getallheaders.php#84262

【讨论】:

我用过这个方法但是没有运气。它没有给我我想要的所有标题。例如,我的应用程序要求客户端发送“owner-id”标头。这是除 getallheaders() 之外的任何函数都无法获得的。 每个页面发送的标头值是否相同?还是每个页面都不一样? 就像后来有人在页面上发布的一样,请确保您将 Content-Type 和 Content-Length 考虑在内,因为它们不遵循相同的命名约定。看到这个帖子:php.net/manual/en/function.getallheaders.php#104307【参考方案2】:

Owner-ID 的请求标头将由 nginx 作为 $_SERVER['HTTP_OWNER_ID'] 传递给 php。所有请求标头都以类似的方式传递。

【讨论】:

我刚刚通过调用包含 使用 curl -H 'Owner-ID: foobar' 和 $_SERVER['HTTP_OWNER_ID'] 的值为 foobar。您是否可能通过关闭 fastcgi_pass_request_headers 来禁用此行为? 我已经卸载了 nginx... 它可能以这种方式提供标头,但还有许多其他问题,例如您无法在不重新编译服务器的情况下安装模块。在生产服务器上部署这很烦人。我现在想留在 apache 上,直到 nginx 变得足够成熟。无论如何感谢您的帮助

以上是关于PHP getallheaders 替代的主要内容,如果未能解决你的问题,请参考以下文章

php PHPでgetallheaders()が动かない时用の关数https://stackoverflow.com/questions/13224615/get-the-http-headers-f

PHP警告:require和PHP致命错误:require()

nginx下用getallheaders

PHPUnit - getallheaders 不起作用

MimeMessage.getAllHeaders() 在两个不同的项目中返回两个不同的类

`xhr.getAllHeaders()` 在浏览器扩展上下文中缺少一些标题?