我试图在PHP中创建一个REST API,我想实现一个类似于亚马逊S3方法的认证方案。这涉及在请求中设置自定义的“授权”标头。
我原以为我可以通过$ _SERVER ['HTTP_AUTHORIZATION']访问头文件,但无法在var_dump($ _ SERVER)中找到它。 apache_request_headers()函数可以解决我的问题,但是我的主机将PHP实现为CGI,因此它不可用。
是否有另一种方式可以访问PHP中的完整请求标头?
我试图在PHP中创建一个REST API,我想实现一个类似于亚马逊S3方法的认证方案。这涉及在请求中设置自定义的“授权”标头。
我原以为我可以通过$ _SERVER ['HTTP_AUTHORIZATION']访问头文件,但无法在var_dump($ _ SERVER)中找到它。 apache_request_headers()函数可以解决我的问题,但是我的主机将PHP实现为CGI,因此它不可用。
是否有另一种方式可以访问PHP中的完整请求标头?
你需要做一些mod_rewrite
魔法让你的头过去的CGI屏障,就像这样:
RewriteEngine on
RewriteRule .? - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
<?php
$auth = $_SERVER['HTTP_AUTHORIZATION'];
?>
请注意,如果你使用mod_rewrite
用于其他目的,它可能最终会被$_SERVER['REDIRECT_HTTP_AUTHORIZATION']
。
有一个奇妙的PECL扩展,允许各种HTTP相关访问。 PECL_HTTP,更具体地说是http://php.net/http和http://php.net/manual/en/function.http-get-request-headers.php。
尝试
$_ENV['HTTP_AUTHORIZATION']
当使用代替Apache模块接口CGI接口,HTTP头应该作为环境变量。
这就像一个魅力,谢谢你。 – vamin 2009-05-05 22:21:44