2009-07-25 24 views
3

我一直在嘗試使用第一個php-openId(Jain)然後是ZendFramework來獲得一個簡單的OpenId登錄,並且在這兩種情況下,我都遇到了類似的問題問題。我使用http://framework.zend.com/manual/en/zend.openid.consumer.html的步驟38.2.2中的示例Zend代碼。Zend_OpenId_Consumer登錄函數掛起 - 即使在示例代碼

我看到的登錄頁面,但是當我輸入我的OpenID,這段代碼執行: 如果(isset($ _ POST [ 'openid_action'])& & $ _ POST [ 'openid_action'] ==「登錄」 & & !空($ _ POST [ 'openid_identifier'])){

echo "New consumer"; 
    $consumer = new Zend_OpenId_Consumer(); 
    echo "Gotim"; 

    if (!$consumer->login($_POST['openid_identifier'])) { 
     $status = "OpenID login failed."; 
     echo "Failure"; 
    } 
    echo "Continuing"; 

代碼在函數調用貌似掛到$消費者 - >登錄。我看到前兩個回聲的輸出,但我從來沒有看到失敗或繼續(並且沒有回聲,當我嘗試登錄時,我只得到500個服務器內部錯誤)。如果我輸入一個無效的openId,然後我得到正確的「OpenID登錄失敗。」錯誤信息。

我很抱歉,如果我在這裏當白癡。我是一名曾被提拔爲管理層的前程序員,我試圖回到它 - 但我正在使用一些對我來說是新手的技術(PHP,OpenID,Zend Framework),而這只是一種現在沒有任何意義。

有沒有人有任何想法在哪裏看?我無法相信框架本身是被竊聽的(特別是當我也有類似的Jain openId問題時)。我正在使用fatcow.com進行虛擬主機 - 不確定這是否相關。

+0

檢查您的服務器日誌!他們可能會提供一些額外的錯誤信息。 – jason 2009-07-25 22:51:33

+0

我檢查過了,很遺憾這個調用沒有產生任何錯誤日誌。 – papagen0 2009-07-25 23:14:49

回答

0

我仍然不明白什麼是錯誤的,但我試着在不同的web主機(x10hosting.com)上運行相同的代碼,並且我的示例代碼立即生效。因此,我必須得出結論,這是Fatcow網站託管服務的某種限制,這實在是一種恥辱。我想我會改變主機。

0

如果您收到500錯誤,那麼Web服務器日誌中肯定會有更詳細的消息。如果你的服務器運行的是Apache,那麼它很可能在/ usr/local/apache/logs/error_log或/ etc/httpd/logs/error_log或類似的地方。我假設你在共享主機方案,所以你將無法訪問這些。您應該聯繫您的虛擬主機公司,因爲他們可以查看日誌。

1

當您試圖建立到OpenID提供程序的外部HTTP連接時,您的代碼似乎失敗。這可能是由一些事情引起的,但這裏有幾點建議:

  • 也許你是在代理的背後?
  • 如果不是這樣,也許您當前的主機不允許使用套接字聯繫遠程服務器(url_fopen ini指令)。 Zend_Http_Client的默認適配器是其套接字適配器。

所以,我會建議您嘗試是使用setHttpClient方法來使用不同的適配器Zend_Http_Client實例傳遞給你的Zend_OpenId_Consumer類。

有幾個不同的client adapters可供選擇:

  • Zend_Http_Client_Adapter_Socket(默認)
  • Zend_Http_Client_Adapter_Proxy
  • Zend_Http_Client_Adapter_Test
  • Zend_Http_Client_Adapter_Curl

嘗試是這樣的:

$client = new Zend_Http_Client(null, array(
    'adapter' => 'Zend_Http_Client_Adapter_Proxy', 
    'proxy_host' => 'example.com', 
    'proxy_port' => 8000, 
    'proxy_user' => 'user', 
    'proxy_pass' => 'pass' 
)); 

$consumer = new Zend_OpenId_Consumer(); 
$consumer->setHttpClient($client); 

您的ISP應該有關於其代理的文檔,如果這實際上是問題。 如果代理不是你的問題,請嘗試curl適配器,看看你是否有更多的運氣。