我正在尝试在PHP中创建REST API,我想实现类似于Amazon S3方法的身份验证方案。这涉及在请求中设置自定义“授权”标题。
我以为我可以使用$ _SERVER ['HTTP_AUTHORIZATION']访问标题,但是在var_dump($ _ SERVER)中找不到它。 apache_request_headers()函数可以解决我的问题,但是我的主机将PHP实现为CGI,因此它不可用。
我可以通过另一种方式访问PHP中的完整请求标头吗?
答案 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/http和http://php.net/manual/en/function.http-get-request-headers.php。