在开始之前,我想指出我浏览了 Stack Overflow 并发现了其他类似的问题 - PHP_AUTH_USER not set?和 HTTP Auth via PHP - PHP_AUTH_USER not set? - 这些已经指出,如果“服务器 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");
...但我得到与上面相同的输出。
知道我做错了什么吗?也许我还需要启用/配置其他东西?
最佳答案
对于 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)));
关于php - 为什么 $_SERVER ["PHP_AUTH_USER"] 和 $_SERVER ["PHP_AUTH_PW"] 没有设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14724127/