如何访问$ _SERVER中未出现的请求标头?

时间:2009-05-05 21:47:28

标签: php http http-headers

我正在尝试在PHP中创建REST API,我想实现类似于Amazon S3方法的身份验证方案。这涉及在请求中设置自定义“授权”标题。

我以为我可以使用$ _SERVER ['HTTP_AUTHORIZATION']访问标题,但是在var_dump($ _ SERVER)中找不到它。 apache_request_headers()函数可以解决我的问题,但是我的主机将PHP实现为CGI,因此它不可用。

我可以通过另一种方式访问​​PHP中的完整请求标头吗?

3 个答案:

答案 0 :(得分:24)

你需要做一些mod_rewrite魔法让你的标题超过CGI障碍,如下所示:

RewriteEngine on
RewriteRule .? - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

<?php
    $auth = $_SERVER['HTTP_AUTHORIZATION'];
?>

请注意,如果您将mod_rewrite用于其他目的,最终可能会$_SERVER['REDIRECT_HTTP_AUTHORIZATION']

答案 1 :(得分:4)

尝试

$_ENV['HTTP_AUTHORIZATION']

使用CGI接口而不是Apache模块接口时,HTTP标头应该可用作环境变量。

答案 2 :(得分:1)

有一个很棒的PECL扩展,允许各种与HTTP相关的访问。 PECL_HTTP,更具体地说是http://php.net/httphttp://php.net/manual/en/function.http-get-request-headers.php