在开始之前,我想指出我已经浏览了Stack Overflow并发现了其他类似的问题 - PHP_AUTH_USER not set?和HTTP Auth via PHP - PHP_AUTH_USER not set? - 这些都指出了身份验证$ _SERVER变量如果''Server API''设置为''CGI / FCGI'',则不会设置,但我检查了''phpinfo()''输出,我的''Server API''设置为''Apache 2.0处理程序 ''。
好的,我有一个简单的脚本如下:
<?php
echo "Username: " . $_SERVER["PHP_AUTH_USER"] . ", Password: " . $_SERVER["PHP_AUTH_PW"];
?>
...我通过以下方式远程呼叫:
wget -v --http-user=johnsmith --http-password=mypassword http://www.example.com/myscript.php
...但只输出:
Username: , Password:
我还尝试使用PHP cURL调用脚本并正确设置身份验证参数,如下所示:
curl_setopt($ch, CURLOPT_USERPWD, "johnsmith:mypassword");
...但我得到与上面相同的输出。
知道我做错了什么吗?也许我需要启用/配置其他东西?
答案 0 :(得分:12)
对于PHP-CGI:
在.htaccess中添加:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
</IfModule>
并在脚本开头添加:
list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
答案 1 :(得分:5)
我终于在irc.freenode.net的## php中借助Naktibalda的帮助找到了答案
以下页面总结了问题:http://php.net/manual/en/features.http-auth.php
引用相关位:
从PHP 4.3.0开始,为了防止某人编写显示通过传统外部机制验证的页面密码的脚本,如果为该特定用户启用了外部身份验证,则不会设置PHP_AUTH变量页面和安全模式已启用。无论如何,REMOTE_USER可用于识别外部认证用户。所以,你可以使用$ _SERVER ['REMOTE_USER']。
...
PHP使用AuthType指令的存在来确定外部身份验证是否有效。
答案 2 :(得分:1)
尝试了以前的建议,没有用,也发现了
CGIPassAuth On
是建议的htaccess的最新版本,但对我仍然无效,相反,我使用了
SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
(必须在您的htaccess根文件中),然后在php文件中
list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['REDIRECT_HTTP_AUTHORIZATION'], 6)));
如果仍然有人遇到问题,我建议他们检查服务器变量,因为数据可能位于不同的变量中,所以您寻找的是从基本开始的
答案 3 :(得分:-4)
这应该是这样的
echo "Username: " . $_SERVER[PHP_AUTH_USER] . ", Password: " . $_SERVER[PHP_AUTH_PW];