我们使用的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_USERPHP_AUTH_PW变量:

if (preg_match(\'/Basic\\s+(.*)$/i\', $_SERVER[\'HTTP_AUTHORIZATION\'], $matches))
{
    list($name, $password) = explode(\':\',  64_decode($matches[1]));
    $_SERVER[\'PHP_AUTH_USER\'] = strip_tags($name);
    $_SERVER[\'PHP_AUTH_PW\'] = strip_tags($password);
}

这使得PHP使用HTTP_AUTHORIZATION变量提取PHP_AUTH_USERPHP_AUTH_PW变量。

采用此方法可能看起来像一个简单的PHP脚本的一个完整的例子:

<?php
    if (preg_match(\'/Basic\\s+(.*)$/i\', $_SERVER[\'HTTP_AUTHORIZATION\'], $matches))
    {
        list($name, $password) = explode(\':\',  64_decode($matches[1]));
        $_SERVER[\'PHP_AUTH_USER\'] = strip_tags($name);
        $_SERVER[\'PHP_AUTH_PW\'] = strip_tags($password);
    }
    echo \"<p>Username is \", $_SERVER[\'PHP_AUTH_USER\'], \"</p>\";
    echo \"<p>Password is \", $_SERVER[\'PHP_AUTH_PW\'], \"</p>\";
?>
收藏 打印