使用PHP作为FCGI运行的HTTP身份验证

时间:2011-10-25 04:24:03

标签: php apache fastcgi

我无法获得基本的HTTP身份验证,以便在安装并作为FCGI工作的PHP中工作。当PHP作为模块安装时,它可以很好地工作。

有什么方法可以让它工作吗?

我在ubuntu中运行PHP 5.2.6版。

<?Php 
if ( !$_SERVER['PHP_AUTH_USER'] ) {
    $this->getResponse()->setHeader('WWW-Authenticate',  'Basic realm="Testing"');
    $this->getResponse()->setBody('Unauthorized');
    $this->getResponse()->setHttpResponseCode(401);
} else { 
    var_dump($_SERVER['PHP_AUTH_USER']);
    var_dump($_SERVER['PHP_AUTH_PW']);
}  

我确实尝试了

[Rewrite rule on .htaccess]
 RewriteEngine on
 RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L]

[user:pass on PHP-script]
list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':',     base64_decode(substr($_SERVER['REDIRECT_REMOTE_USER'], 6)));

但它似乎无法正常工作。

2 个答案:

答案 0 :(得分:4)

删除你的.htaccess并用这一行写一个新的:

SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0

并且您的PHP将正常工作。

答案 1 :(得分:1)

您需要手动将$_SERVER['PHP_AUTH_USER']$_SERVER['PHP_AUTH_PW']传递给PHP FCGI。 CGI协议根本不支持这些变量。

如果您仍想使用这些,我在http://be2.php.net/manual/en/features.http-auth.php#108132

找到了一些有趣的内容(并确认了我刚才所说的内容)