为什么简单的PHP头授权不起作用

为什么简单的PHP头授权不起作用,php,Php,我在三个通过同一帐户托管的网站上使用了以下代码: $username = 'test'; $password = 'test'; If (!isset($_SERVER['PHP_AUTH_USER'])|| !isset($_SERVER ['PHP_AUTH_PW'])|| ($_SERVER['PHP_AUTH_USER'] != $username) || ($_SERVER['PHP_AUTH_PW'] != $password)){ //send this if the

我在三个通过同一帐户托管的网站上使用了以下代码:

$username = 'test'; 
$password = 'test';

If (!isset($_SERVER['PHP_AUTH_USER'])|| !isset($_SERVER ['PHP_AUTH_PW'])||
    ($_SERVER['PHP_AUTH_USER'] != $username) || ($_SERVER['PHP_AUTH_PW'] != $password)){

//send this if the user and pass arent correct

header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic Realm= "mysite"');
exit('<h2> Go away Creep!!</h2> you need a username and password to enter this kingdom!!');
}
$username='test';
$password='test';
如果(!isset($_服务器['PHP_AUTH_用户']))| |!isset($_服务器['PHP_AUTH_PW']))||
($_服务器['PHP_AUTH_USER']!=$username)| |($_服务器['PHP_AUTH_PW']!=$password)){
//如果用户和密码不正确,请发送此消息
标题(“HTTP/1.1 401未经授权”);
标题('WWW-Authenticate:Basic Realm=“mysite”);
退出('Go away Screw!!你需要用户名和密码才能进入这个王国!!');
}
在几天前我升级到一个新的盒子之前,它工作得非常好。托管公司说他们的终端一切都很好,服务器迁移进行得很顺利,但这个脚本突然不起作用。我输入了正确的user和pass,对话框只是再次提示我输入user和pass

有什么可能会改变,使这段代码无法工作?htaccess中是否有人在影响它?服务器设置

新box上的PHP版本是5.2,但我可以升级到5.3


非常感谢您的帮助。

您是否检查了phpinfo()调用中的值?如果
safe\u mode
设置为
on
我认为您无法访问
PHP\u AUTH.*
服务器变量。好消息是PHP5.4中已经没有了安全模式,因此如果您可以升级,可能会解决问题。

var\u dump($\u服务器),这样您就可以看到实际传递的内容。具体取决于SAPI。在CGI和FastCGI环境中,PHP_AUTH_USER不存在,出于安全原因,Authorization:header被抑制。然后查看手册注释中的解决方法。感谢您的建议…刚刚选中,但安全模式设置为off。您是否看到PHP_AUTH_*变量中的预期值?在标题提示再次输入之前转储或回显它们时遇到问题。最好的方法是什么?谢谢你的帮助。确保.htpass文件仍在正确的位置/具有正确的权限/工作正常。如果有效,请添加一个querystring参数,该参数可以覆盖授权检查。