PHP无法获取自定义头部

248 阅读1分钟

1.检查自定义头部是否带有下划线_

nginx 会将带下划线_的头部视为变量过滤掉,下面设置可以取消掉

underscores_in_headers on;

2.是否用了getallheaders获取头部

此函数不同php版本对不同模式下的支持

版本说明
5.5.7此函数可用于 CLI server。
5.4.0此函数可用于 FastCGI。 此前仅在PHP以 Apache 模块方式运行时支持。
4.3.04.3.0

如果不支持getallheaders函数,可以试下下面的方式

           if (function_exists('getallheaders')) {
                $headers = getallheaders();
                foreach ($headers as $name => $value) {
                    $this->_headers->add($name, $value);
                }
            } elseif (function_exists('http_get_request_headers')) {
                $headers = http_get_request_headers();
                foreach ($headers as $name => $value) {
                    $this->_headers->add($name, $value);
                }
            } else {
                foreach ($_SERVER as $name => $value) {
                    if (strncmp($name, 'HTTP_', 5) === 0) {
                        $name = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))));
                        $this->_headers->add($name, $value);
                    }
                }
            }