2013-02-06 102 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']'等等 –

相關問題