为什么没有设置$ _SERVER ["PHP_AUTH_USER"]和$ _SERVER ["PHP_AUTH_PW"]?

Kos*_*tos 7 php authentication web-services basic-authentication

在开始之前,我想指出我已经浏览了Stack Overflow并发现了其他类似的问题 - PHP_AUTH_USER未设置?PHP通过PHP验证 - PHP_AUTH_USER未设置? - 并且这些已经指出,如果''Server API''设置为''CGI/FCGI'',则不会设置认证$ _SERVER变量,但是我检查了''phpinfo()''输出和'' 'Server API''设置为''Apache 2.0 Handler''.

好的,我有一个简单的脚本如下:

<?php
    echo "Username: " . $_SERVER["PHP_AUTH_USER"] . ", Password: " . $_SERVER["PHP_AUTH_PW"];
?>
Run Code Online (Sandbox Code Playgroud)

...我通过以下方式远程呼叫:

wget -v --http-user=johnsmith --http-password=mypassword http://www.example.com/myscript.php
Run Code Online (Sandbox Code Playgroud)

......但只输出:

Username: , Password:
Run Code Online (Sandbox Code Playgroud)

我还尝试使用PHP cURL调用脚本并正确设置身份验证参数,如下所示:

 curl_setopt($ch, CURLOPT_USERPWD, "johnsmith:mypassword");
Run Code Online (Sandbox Code Playgroud)

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

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

Ted*_*ddy 12

对于PHP-CGI:

在.htaccess中添加:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

并在脚本的开头添加:

list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
Run Code Online (Sandbox Code Playgroud)


Kos*_*tos 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指令的存在来确定外部身份验证是否有效.