У меня есть приложение PHP, которое должно выполнять проверку подлинности HTTP Basic независимо от содержащего сервер Apache.
На машинах linux с php, установленным через apt-get php
, я обнаружил, что заголовок Authorization
не отображается в $_SERVER
, но доступен через apache_request_headers()
или getallheaders()
.
На машине разработки Windows с Zend Server 6.1.0 / PHP 5.4 я не могу получить значение заголовка Authorization
из PHP любым из вышеперечисленных методов. Как я могу получить его ценность?
Я не смог точно определить это, но, похоже, Zend Server может использовать FCGI для отправки запросов Apache на PHP (например, переменная PHP_FCGI_MAX_REQUESTS
появляется в $_SERVER
).
Если бы это было так, это объясняло бы мою проблему, так как mod_fcgid
намеренно включал заголовок Authorization
из приложений, см. Http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#fcgidpassheader
Я попробовал добавить
FcgidPassHeader Authorization
к моему apache httpd.conf
, но он просто жаловался, что:
Invalid command 'FcgidPassHeader', perhaps misspelled or defined by a module not included in the server configuration
Точно так же, возможно, Zend использует mod_fastcgi
? На этой странице http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html#FastCgiConfig Я попытался добавить следующее к моему apache httpd.conf
:
FastCgiConfig -pass-header Authorization
опять же, он просто жаловался, что:
Invalid command 'FastCgiConfig', perhaps misspelled or defined by a module not included in the server configuration
Я обнаружил, что могу обойти это, добавив следующее в конфигурацию apache в Windows:
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
Это добавляет ключ HTTP_AUTHORIZATION
к глобальному $_SERVER
, точно так же, как если бы заголовок Authorization
был передан Apache.