HTTP-авторизация в PHP
На нашем Linux-хостинге PHP-скрипты работают как CGI-скрипты. Поэтому в серверных переменных PHP не передается значение REMOTE_USER.
Чтобы корректно настроить HTTP-авторизацию в PHP, необходимо указать верные параметры в скрипте и файле .htaccess. Рассмотрим это на конкретном примере. У нас есть неработающий скрипт, в котором нужно исправить настройки:
Чтобы скрипт заработал, в файл .htaccess нужно внести следующие изменения:
Также необходимо внести изменения в сам скрипт:
После этого HTTP-авторизация будет работать корректно.
Чтобы корректно настроить 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-авторизация будет работать корректно.
0 комментариев