2012-12-04 33 views
0

我一直在努力通過PHP,MySQL,Javascript & CSS第二版羅伯特尼克松(O'Reilly 2012)。我設法在我的WAMP服務器(Zend服務器)上建立了一個數據庫。HTTP身份驗證將無法在本地主機上Zend WAMP服務器

本書將介紹如何驗證用戶名和密碼。我設法創建了幾個用戶名,其密碼已成功添加到我的數據庫中。我知道,因爲我連接到數據庫,讀取SELECT查詢的結果並回顯給瀏覽器。

當我再試試這裏的身份驗證登錄:

if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {....perform database query and compare username/password....} 

不關我的用戶名和密碼的工作。在Firefox和IE中都會彈出'驗證必需'窗口。 PHP代碼沒有越過if語句(我試着在if語句之前和之後立即發送輸出到瀏覽器),所以似乎輸入的用戶名和密碼沒有被傳遞給PHP服務器。

我確定'localhost'是專門在Firefox上授權的,但仍然沒有成功。

任何建議將受到歡迎。

Gary

+0

你做了什麼調試?你是否看到這兩個$ _SERVER變量中的實際值? –

+0

只要輸入用戶名和密碼,身份驗證輸入窗口就會再次彈出。我試圖將$ _SERVER變量的值回顯給瀏覽器(緊隨if語句之後),但沒有出現任何內容。然後,我放置了一個for循環來向瀏覽器輸出一千行隨機文本,但沒有執行,所以看起來好像'if'語句讀取錯誤,然後再次顯示驗證框。所以看起來好像$ _SERVER變量不包含任何內容。 –

回答

1

找到了!我在嘗試相同的示例(!)時遇到了同樣的問題,並發現當php以cgi運行時出現問題。你可以通過調用php_sapi_name()來檢測它:如果函數返回'cgi-fcgi'(這似乎是Zend下的默認值),那麼基本認證不起作用。您可以在Server API(CGI/FastCGI)下的phpInfo中找到相同的信息。

在我的情況下,dev版本有這個問題,而活版本沒有(網站使用Apache 2.0 Handler)。現在,我只是添加了一個檢查,如果檢測到cgi-fgci(我不需要在本地主機上進行身份驗證),則禁用身份驗證,但當然我想找到一個可行的替代方案。

+0

這個技巧解決了這個問題:http://planetozh.com/blog/2009/04/http-authentication-on-php-as-cgi-like-dreamhost/ –

相關問題