Intereting Posts
Использование виртуальных полей в cakePHP 2.x Symfony 2 Создайте поле формы объекта с двумя свойствами Apache / PHP: Во всяком случае, чтобы получить значение ServerName с помощью PHP Как отключить (удалить) изображение в CodeIgniter Codeigniter (CSRF) jQuery ajax проблема OpenCart: Где находится div для выпадающей информации корзины заголовков? Моя ошибка SQL: попытка подключения не удалась, потому что связанная сторона неправильно ответила Необходимо избегать ввода пользователем из базы данных? PHP include_once: обработка импорта, т.е. для файлов конфигурации QuickBooks обнаружил ошибку при анализе предоставленного текстового потока XML Лучший способ хранения цветов продукта в базе данных Закрытие подключения MySQL в PHP Как показать непрерывные обновления в реальном времени, такие как facebook ticker, домашняя страница meetup.com? PHP список всех файлов в каталоге PHP, как строчить массив и хранить в cookie

Почему $ _SERVER и $ _SERVER не установлены?

Прежде чем начать, я хотел бы указать, что я просматривал 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];