Zend xmlrpc错误

时间:2018-03-30 17:23:07

标签: php zend-framework xml-rpc

我在Zend(v1)XmlRpc客户端出现此错误:

未捕获的异常'Zend_XmlRpc_Client_FaultException',消息'无法解析响应'。

这是错误状态651。

调用永远不会达到所请求的类/方法,似乎调用没有像被阻止的那样被触发。我正在对调用的方法进行调试,但它没有被触发。

PHP版本为5.4。

修改

以下是代码:

来电者课程:

require_once 'library/Zend/XmlRpc/Client.php';

class FrontService
{
    private $client;

    public function __construct($xmlRpc)
    {
       $this->client = new Zend_XmlRpc_Client($xmlRpc);

    }

    public function call($name, $params = array())
    {

        return $this->client->call($name, $params);
    }
}

致电课程:

$this->_fs = new FrontService(HM_Config::getParam("amf-url"));
$editos = $this->_fs->call('getEdito',$params_home);

代码叫:

include_once realpath(dirname(__FILE__) .'/..') 
.'/application/bootstrap.php';
require_once '_config.php';
require_once 'DirectDbConnectionV2.php';

class FrontGateway extends DirectDbConnectionV2
{
    public static $smStatic;

    function __construct()
    {
        mysql_query("SET NAMES 'utf8'");

        $this->sm  = self::$smStatic;   
        $this->log = new Log();
        $this->log->set_file('amfDbConnection');
        $this->log->write('construct bordel');
    }
}
FrontGateway::$smStatic = $sm;
$controllerManager = $sm->get('EditoWebsiteMVC\ControllerManager');
$controllerManager->run('EditoWebsite\Controller\UIGateway', 'xmlRpc');

应该执行的代码:

namespace EditoWebsite\Controller;

use EditoWebsiteMVC\AbstractController;
use EditoWebsiteMVC\ViewRender\CLI as CLIViewRender;
use EditoWebsiteMVC\ViewRender\HTMLTemplate as HTMLTemplateViewRender;
use Zend_XmlRpc_Server as XmlRpcServer;

class UIGatewayController extends AbstractController
{
    public function xmlRpcAction()
    {
        $svr = new XmlRpcServer();
        $svr->setClass('FrontGateway');
        echo $svr->handle();
        exit;
    }
}

永远不会到达 DirectDbConnectionV2 getEdito 方法中的代码。

我需要在服务器上启用某些功能吗?或者我需要打开的端口?

编辑编辑

我应该提一下,代码正在处理我可以访问的另一台服务器,有什么我应该比较/检查以解决这个问题吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

我认为甚至没有足够的信息来猜测,但让我试试。

我遇到了类似的问题,发送的请求从未到达服务器。事实证明,Zend_Http_Client_Adapter_Socket适配器绑定到IPv6,并且由于路由问题请求从未到达服务器。

最后,解决这个问题的是:

$client->getAdapter()->setStreamContext(array(
    'socket' => array('bindto' => '0:0'),
));

其中$clientZend_Http_Client的实例。

同样,它只是在黑暗中拍摄,但值得尝试。 :)

修改

在您的情况下,您应该向FrontService构造函数添加以下内容:

$this->client->getHttpClient()->getAdapter()->setStreamContext(array(
    'socket' => array('bindto' => '0:0'),
));

修改编辑:

回到1.9.0,Zend_Http_Client上没有getAdapter,你必须自己创建适配器并将其传递给http客户端:

public function __construct($xmlRpc)
{
   $this->client = new Zend_XmlRpc_Client($xmlRpc);

   $adapter = Zend_Http_Client_Adapter_Socket();
   $adapter->setStreamContext(array(
       'socket' => array('bindto' => '0:0'),
   ));

   $this->client->getHttpClient()->setAdapter($adapter);
}

干杯。