13

在开始之前,我想指出我已经浏览过 Stack Overflow 并发现了其他类似的问题 - PHP_AUTH_USER not set?通过 PHP 的 HTTP 身份验证 - PHP_AUTH_USER 未设置?- 这些已经指出,如果“服务器 API”设置为“CGI/FCGI”,则不会设置身份验证 $_SERVER 变量,但我检查了我的 ''phpinfo()'' 输出和我的' “服务器 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");

...但我得到与上面相同的输出。

知道我做错了什么吗?也许我还需要启用/配置其他东西?

4

4 回答 4

15

对于 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)));
于 2014-03-21T08:52:22.407 回答
7

感谢 Naktibalda 在 irc.freenode.net 上 ##php 的帮助,我终于找到了答案

以下页面总结了该问题: http: //php.net/manual/en/features.http-auth.php

引用相关位:

从 PHP 4.3.0 开始,为了防止有人编写脚本来泄露通过传统外部机制进行身份验证的页面的密码,如果为该特定页面启用了外部身份验证并且安全,则不会设置 PHP_AUTH 变量模式已启用。无论如何,REMOTE_USER 可用于识别经过外部验证的用户。因此,您可以使用 $_SERVER['REMOTE_USER']。

...

PHP 使用 AuthType 指令的存在来确定外部身份验证是否有效。

于 2013-02-11T10:06:49.607 回答
3

尝试了之前的建议,没有用,也发现了

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)));

如果有人仍然有问题,我建议他们检查服务器变量,因为数据可能在不同的变量中,你正在寻找以基本开头的东西

于 2018-11-07T19:50:08.583 回答
-7

这应该是这样的

echo "Username: " . $_SERVER[PHP_AUTH_USER] . ", Password: " . $_SERVER[PHP_AUTH_PW];
于 2014-03-26T10:49:13.573 回答