我们使用的PHP以增加安全性的CGI版本,所以你不能正常使用“PHP_AUTH_USER”和“PHP_AUTH_PW”变量。然而,有一种方法可以“绝招”Apache和PHP到这样做。只要按照下面的说明。
第1步:创建一个.htaccess文件
首先,创建的.htaccess在同一目录下你的PHP脚本文件。该文件应包含以下两行:
RewriteEngine on
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization},last]
这告诉Apache Web服务器通过加密的用户名和密码的变量命名到PHP HTTP_AUTHORIZATION。
第2步:使用PHP_AUTH_USER和PHP_AUTH_PW之前添加额外的PHP代码
在PHP脚本,包括使用前这段代码PHP_AUTH_USER和PHP_AUTH_PW变量:
if (preg_match('/Basic\s+(.*)$/i', $_SERVER['HTTP_AUTHORIZATION'], $matches))
{
list($name, $password) = explode(':', base64_decode($matches[1]));
$_SERVER['PHP_AUTH_USER'] = strip_tags($name);
$_SERVER['PHP_AUTH_PW'] = strip_tags($password);
}
这使得PHP使用HTTP_AUTHORIZATION变量提取PHP_AUTH_USER和PHP_AUTH_PW变量。
采用此方法可能看起来像一个简单的PHP脚本的一个完整的例子:
if (preg_match('/Basic\s+(.*)$/i', $_SERVER['HTTP_AUTHORIZATION'], $matches))
{
list($name, $password) = explode(':', base64_decode($matches[1]));
$_SERVER['PHP_AUTH_USER'] = strip_tags($name);
$_SERVER['PHP_AUTH_PW'] = strip_tags($password);
}
echo "
Username is ", $_SERVER['PHP_AUTH_USER'], "
";echo "
Password is ", $_SERVER['PHP_AUTH_PW'], "
";?>