HTTP Auth через PHP – PHP_AUTH_USER не установлен?

Я попытался выполнить небольшую проверку подлинности через http и скопировал этот бит кода из сети, чтобы проверить, будет ли это работать должным образом:

<?php if(!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="My Realm"'); header('HTTP/1.0 401 Unauthorized'); echo 'Text to send if user hits Cancel button'; exit; } else { echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>"; echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>"; } ?> 

Тем не менее, мой браузер всегда запрашивает имя пользователя и пароль, но никогда ничего не выводит, пока я не отменил. Поэтому я думаю, что $_SERVER['PHP_AUTH_USER'] никогда не устанавливается! Что может быть проблемой? Я запускаю Ubuntu 10.04 LTS Server с Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.7d DAV/2 Server .

Запустите phpinfo (). если «API-интерфейс сервера» – это CGI / FCGI, вы можете в значительной степени забыть об этом, поскольку нет разумного способа использования HTTP-аутентификации с PHP.

Для PHP-CGI:

в .htaccess добавить это:

 <IfModule mod_rewrite.c> RewriteEngine on RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] </IfModule> 

и в начале вашего скрипта добавьте следующее:

 list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));