Zend_OpenId_Consumer登录函数挂起 - 即使在示例代码中也是如此

时间:2009-07-25 22:49:56

标签: php zend-framework openid

我一直在尝试使用第一个php-openId(Jain)和ZendFramework进行简单的OpenId登录工作,在这两种情况下我遇到了类似的问题。我正在使用http://framework.zend.com/manual/en/zend.openid.consumer.html的步骤38.2.2中的示例Zend代码。

我看到登录页面很好,但是当我输入openId时,此代码执行:     if(isset($ _ POST ['openid_action'])&&         $ _POST ['openid_action'] ==“登录”&&         !empty($ _ 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";

代码似乎挂起了对$ consumer-> login的函数调用。我看到前两个回声的输出,但我从未看到失败或继续(没有回声我只是在尝试登录时得到500服务器内部错误)。如果我输入无效的openId,那么我会得到正确的“OpenID登录失败”。错误信息。

如果我在这里是个白痴,我道歉。我是一名前升级管理人员的程序员,我正在尝试重新加入它 - 但我正在使用一些对我来说很新的技术(PHP,OpenID,Zend Framework),而这只是现在没有任何意义。

有没有人有任何想法在哪里看?我无法相信框架本身被窃听(特别是当我遇到与Jain openId类似的问题时)。我正在使用fatcow.com进行网络托管 - 不确定这是否相关。

3 个答案:

答案 0 :(得分:1)

尝试与OpenID提供程序建立外部HTTP连接时,您的代码似乎失败了。这可能是由许多事情引起的,但这里有几个建议:

  • 也许你是代理人的背后?
  • 如果不是这样,也许您当前的主机不允许使用套接字(url_fopen ini指令)联系远程服务器。 Zend_Http_Client的默认适配器是其套接字适配器。

因此,我建议尝试使用Zend_Http_Client类使用Zend_OpenId_Consumer类将setHttpClient实例传递给Zend_Http_Client_Adapter_Socket类。

有几种不同的client adapters可用:

  • 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);

尝试这样的事情:

curl

如果这实际上是问题,您的ISP应该有关于其代理的文档。 如果代理不是您的问题,请尝试{{1}}适配器,看看您是否还有运气。

答案 1 :(得分:0)

我仍然不明白什么是错的,但我尝试在不同的网络主机(x10hosting.com)上运行相同的代码,我的示例代码立即工作。因此,我必须得出结论,这是Fatcow虚拟主机服务的某种限制,这是一种耻辱。我想我会改变主持人。

答案 2 :(得分:0)

如果您收到500错误,那么Web服务器日志中肯定会有更详细的消息。如果您的服务器正在运行apache,那么很可能是在/ usr / local / apache / logs / error_log或/ etc / httpd / logs / error_log或类似的东西下。我假设您正在使用共享主机方案,因此您将无法访问这些内容。您应该联系您的虚拟主机公司,因为他们可以为您查看日志。