Я попытался выполнить небольшую проверку подлинности через 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)));