J’ai une application PHP qui doit effectuer une authentification HTTP Basic indépendamment du serveur Apache contenant.
Sur les machines Linux, avec php installé via apt-get php
, je trouve que l’en-tête Authorization
n’apparaît pas dans $_SERVER
, mais est disponible via apache_request_headers()
ou getallheaders()
.
Sur une machine de développement Windows, avec Zend Server 6.1.0 / PHP 5.4, je ne parviens pas à obtenir la valeur d’en-tête Authorization
dans PHP avec l’une des méthodes ci-dessus. Comment puis-je obtenir sa valeur?
Je n’ai pas pu le déterminer avec certitude, mais il semble que Zend Server puisse utiliser FCGI pour envoyer des requêtes Apache à PHP (par exemple, la variable PHP_FCGI_MAX_REQUESTS
apparaît dans $_SERVER
).
Si cela était vrai, cela expliquerait mon problème, car mod_fcgid
délibérément l’en-tête Authorization
des applications, voir http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#fcgidpassheader
J’ai essayé d’append
FcgidPassHeader Authorization
à mon apache httpd.conf
, mais il s’est juste plaint que:
Invalid command 'FcgidPassHeader', perhaps misspelled or defined by a module not included in the server configuration
De même, peut-être que Zend utilise mod_fastcgi
? Basé sur cette page http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html#FastCgiConfig J’ai essayé d’append ce qui suit à mon apache httpd.conf
:
FastCgiConfig -pass-header Authorization
encore une fois, il s’est juste plaint que:
Invalid command 'FastCgiConfig', perhaps misspelled or defined by a module not included in the server configuration
J’ai trouvé que je pouvais contourner ce problème en ajoutant ce qui suit à la configuration apache sous Windows:
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
Cela ajoute une clé $_SERVER
global $_SERVER
, comme si l’en-tête Authorization
avait été transmis par Apache.