Как получить доступ к заголовкам запроса, которые не отображаются в $_SERVER?
Я пытаюсь создать REST API в PHP, и я бы хотел реализовать схему аутентификации, похожую на подход Amazon S3. Это включает настройку настраиваемого заголовка "Авторизация" в запросе.
Я думал, что смогу получить доступ к заголовку с помощью $_SERVER ['HTTP_AUTHORIZATION'], но его нигде не найти в var_dump ($ _ SERVER). Функция apache_request_headers() решит мою проблему, но мой хост реализует PHP как CGI, поэтому он недоступен.
Есть ли другой способ получить доступ к полным заголовкам запросов в PHP?
Ответы
Ответ 1
Вам понадобится wizardry mod_rewrite
, чтобы получить заголовки мимо CGI-барьера, например:
RewriteEngine on
RewriteRule .? - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
<?php
$auth = $_SERVER['HTTP_AUTHORIZATION'];
?>
Обратите внимание, что если вы используете mod_rewrite
для других целей, это может оказаться $_SERVER['REDIRECT_HTTP_AUTHORIZATION']
.
Ответ 2
Попробуйте
$_ENV['HTTP_AUTHORIZATION']
При использовании интерфейса CGI вместо интерфейса Apache Module, заголовки HTTP должны быть доступны как переменные среды.
Ответ 3
Существует фантастическое расширение PECL, которое позволяет использовать все виды HTTP-доступа. PECL_HTTP и более конкретно http://php.net/http и http://php.net/manual/en/function.http-get-request-headers.php.