2013-02-06 106 views
6

在开始之前,我想指出我浏览过堆栈溢出并发现了其他类似的问题 - PHP_AUTH_USER not set?HTTP Auth via PHP - PHP_AUTH_USER not set? - 这些都指出,如果“服务器”不会设置认证$ _SERVER变量API''被设置为''CGI/FCGI'',但我检查了我的''phpinfo()''输出,我的''服务器API''被设置为''Apache 2.0 Handler''。

行,所以我有一个简单的脚本如下:

<?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

您是否发送了正确的回复码? –

+0

谢谢Iganacio,请您详细说明您的意思? –

回答

5

我终于发现了答案感谢的Naktibalda的帮助下在## PHP irc.freenode.net上

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

引述相关位:

自PHP 4.3.0起,为了防止有人编写脚本来揭示这是通过传统外部机制认证的页面上的密码,PHP_AUTH变量将不会被当外部认证启用设置向前在特定页面和安全模式下启用。无论如何,可以使用REMOTE_USER来标识经过外部验证的用户。所以,你可以使用$ _SERVER ['REMOTE_USER']。

...

PHP用AuthType的存在来判断外部认证是否有效。

10

对于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))); 
-4

这应该是这样的

echo "Username: " . $_SERVER[PHP_AUTH_USER] . ", Password: " . $_SERVER[PHP_AUTH_PW]; 
+4

你错了。 http://www.php.net/manual/en/reserved.variables.server.php你必须为索引使用字符串,所以它必须是:'$ _SERVER ['PHP_AUTH_USER']'等等 –

相关问题