Прежде чем начать, я хотел бы указать, что я просматривал Stack Overflow и нашел другие подобные вопросы – PHP_AUTH_USER не установлен? и HTTP Auth через PHP – PHP_AUTH_USER не установлен? – и они указали, что переменные аутентификации $ _SERVER не будут установлены, если «API-интерфейс сервера» установлен в «CGI / FCGI», но я проверил вывод «phpinfo ()» и «мой», «API сервера» установлен в «Обработчик Apache 2.0».
Итак, у меня есть простой сценарий:
<?php echo "Username: " . $_SERVER["PHP_AUTH_USER"] . ", Password: " . $_SERVER["PHP_AUTH_PW"]; ?>
… который я вызываю удаленно через следующее:
wget -v --http-user=johnsmith --http-password=mypassword http://www.example.com/myscript.php
… но который выводит только:
Username: , Password:
Я также попытался вызвать скрипт с помощью PHP cURL и правильно настроить параметры аутентификации следующим образом:
curl_setopt($ch, CURLOPT_USERPWD, "johnsmith:mypassword");
… но я получаю тот же результат, что и выше.
Любая идея, что я делаю неправильно? Возможно, есть что-то еще, что мне нужно включить / настроить?
Для 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)));
Я, наконец, обнаружил ответ благодаря помощи Нактибалды в ## php на irc.freenode.net
На следующей странице приведена сводка: http://php.net/manual/en/features.http-auth.php
Чтобы процитировать соответствующие биты:
Начиная с PHP 4.3.0, чтобы кто-то не написал сценарий, который показывает пароль для страницы, прошедшей проверку подлинности с помощью традиционного внешнего механизма, переменные PHP_AUTH не будут установлены, если для этой конкретной страницы включена безопасная режим включен. Независимо от того, REMOTE_USER может использоваться для идентификации пользователя, прошедшего проверку подлинности. Таким образом, вы можете использовать $ _SERVER ['REMOTE_USER'].
…
PHP использует наличие директивы AuthType, чтобы определить, действует ли внешняя аутентификация.
это должно быть так
echo "Username: " . $_SERVER[PHP_AUTH_USER] . ", Password: " . $_SERVER[PHP_AUTH_PW];