Как я могу получить доступ к заголовкам запросов, которые не отображаются в $_SERVER?

Я пытаюсь создать REST API в PHP, и я хотел бы реализовать схему аутентификации, аналогичную подходу Amazon S3. Это включает в себя настройку пользовательского заголовка «Авторизация» в запросе.

Я думал, что смогу получить доступ к заголовку с помощью $_SERVER['HTTP_AUTHORIZATION'], но его нигде нет в var_dump($_SERVER). Функция apache_request_headers() решила бы мою проблему, но мой хост реализует PHP как CGI, поэтому она недоступна.

Есть ли другой способ получить доступ к полным заголовкам запросов в PHP?


person vamin    schedule 05.05.2009    source источник


Ответы (3)


Вам нужно будет проделать некоторые mod_rewrite волшебства, чтобы ваши заголовки преодолели барьер CGI, например:

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

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

Обратите внимание, что если вы используете mod_rewrite для других целей, это может оказаться $_SERVER['REDIRECT_HTTP_AUTHORIZATION'].

person chaos    schedule 05.05.2009
comment
Работал на меня! :) +1 - person MrTechie; 28.09.2017

Пытаться

$_ENV['HTTP_AUTHORIZATION']

При использовании интерфейса CGI вместо интерфейса Apache Module заголовки HTTP должны быть доступны как переменные среды.

person NineBerry    schedule 05.05.2009

Существует фантастическое расширение PECL, которое обеспечивает все виды доступа, связанного с HTTP. PECL_HTTP и, в частности, http://php.net/http и http://php.net/manual/en/function.http-get-request-headers.php.

person Jordan S. Jones    schedule 05.05.2009