Справочный центр
Справочный центр: Настройки PHP
HTTP-авторизация в PHP
Отправлено Ярослав Лихачев в 24 December 2013 09:26

На нашем Linux-хостинге PHP-скрипты работают как CGI-скрипты. Поэтому в серверных переменных PHP не передается значение REMOTE_USER.

Чтобы корректно настроить HTTP-авторизацию в PHP, необходимо указать верные параметры в скрипте и файле .htaccess. Рассмотрим это на конкретном примере. У нас есть неработающий скрипт, в котором нужно исправить настройки:

<?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>";
}
?>

Чтобы скрипт заработал, в файл .htaccess нужно внести следующие изменения:

AuthType Basic
AuthUserFile /usr/local/pem/vhosts/100000/webspace/.htpasswd
AuthName "TEST"
require valid-user


<IfModule mod_rewrite.c>
   RewriteEngine on
   SetEnvIfNoCase Authorization "Basic ([a-z0-9=]+)" QUERY_STRING=$1
</IfModule>

Также необходимо внести изменения в сам скрипт:

?php
// split user/pass parts
if (isset($_SERVER["REDIRECT_QUERY_STRING"]) && $_SERVER["REDIRECT_QUERY_STRING"]!='') {
$d = base64_decode($_SERVER["REDIRECT_QUERY_STRING"]);
list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', $d);
}
// open user/pass prompt
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="Your Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Text to send if Cancel button is used';
exit;
} else { echo "<p>Greetings: </p>".$_SERVER['PHP_AUTH_USER'];
echo "<p>Password you entered: </p>".$_SERVER['PHP_AUTH_PW'];
}
phpinfo();
?>

 После этого HTTP-авторизация будет работать корректно.

(4 голосов)

© 2002—2017 ООО «Национальные телекоммуникации»