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

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

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

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

Ответы [ 3 ]

24 голосов
/ 06 мая 2009

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

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

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

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

4 голосов
/ 06 мая 2009

Попробуйте

$_ENV['HTTP_AUTHORIZATION']

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

1 голос
/ 06 мая 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...