Zend Server Windows – L’en-tête d’autorisation n’est pas transmis au script PHP

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?

mod_fcgid?

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 

mod_fastcgi?

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.