在php中需要帮助xmlrpc

时间:2010-07-23 11:24:54

标签: php xml-rpc

我从http://phpxmlrpc.sourceforge.net/

下载了phpxmlrpc

我的网络服务器上有一个名为xmlrpc-test的文件夹,并且创建了一个简单的测试php应用程序。

<?php
include 'xmlrpc.inc';
include 'xmlrpcs.inc';

function sumAndDifference ($params) {

    // Parse our parameters.
    $xval = $params->getParam(0);
    $x = $xval->scalarval();
    $yval = $params->getParam(1);
    $y = $yval->scalarval();

    // Build our response.
    $struct = array('sum' => new xmlrpcval($x + $y, 'int'),
                    'difference' => new xmlrpcval($x - $y, 'int'));
    return new xmlrpcresp(new xmlrpcval($struct, 'struct'));
}

// Declare our signature and provide some documentation.
// (The PHP server supports remote introspection. Nifty!)
$sumAndDifference_sig = array(array('struct', 'int', 'int'));
$sumAndDifference_doc = 'Add and subtract two numbers';

new xmlrpc_server(array('sample.sumAndDifference' =>
                        array('function' => 'sumAndDifference',
                              'signature' => $sumAndDifference_sig,
                              'docstring' => $sumAndDifference_doc)));
?>

我已经加载了phpxmlrpc调试器,输入了地址:,端口:和路径:但是当我按下List available methods的执行按钮时没有任何反应。

问题1 :为什么我的本地调试器不起作用?

所以我上网http://phpxmlrpc.sourceforge.net/jsxmlrpc/debugger/debugger.html,似乎效果更好。

但是,当我在此处按下执行按钮(输入我的服务器详细信息后)时,我收到以下消息。

  

故障代码:[5]原因:'未从远程服务器收到200 OK。 (发送失败)'

我认为这可能意味着我的本地服务器和广域网出现了问题,所以我在http://feedvalidator.org/测试了该应用,我确实得到了响应。

   1. <?xml version="1.0"?>
   2. <methodResponse>
   3. <fault>
   4. <value>
   5. <struct><member><name>faultCode</name>
   6. <value><int>105</int></value>
   7. </member>
   8. <member>
   9. <name>faultString</name>
  10. <value><string>XML error: Invalid document end at line 1, column 1</string></value>
  11. </member>
  12. </struct>
  13. </value>
  14. </fault>
  15. </methodResponse>

我认为这是一个错误,因为没有发送有效负载。

问题2:我该如何解决这个问题?我怎样才能得到一个非常简单的使用php的xmlrpc服务器?

1 个答案:

答案 0 :(得分:0)

对于后代,我会给出我的意见。

首先, 由于安全沙箱的静默破坏,您的本地调试器无法正常工作。 W3C和浏览器供应商制定了一个方案,浏览器将默认将调试器发送的POST请求转换为OPTION请求。它似乎是一个真正的kludge,因为浏览器没有给出它正在这样做的可见迹象,但它是标准行为。如果您进入Firebug或控制台并查看网络流量,您将亲眼看到它。

其次, 这个例子看起来像是关于Joomla的“Master ...”一书。很可能是技术堆栈中任何地方的任何缺陷和配置设置都可能成为障碍。我今天刚遇到同样的问题。这里要学到的真正教训是“不要那样做”。使用具有更好工具链支持和更直接的成功途径的开发环境。