Как получить доступ к заголовкам запроса, которые не отображаются в $_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 должны быть доступны как переменные среды.