2

PHPで単純なXMLRPCサーバーを作成しようとしています。

いくつかのドキュメントを読みましたが、次のような最小限の実装が見つかりました。

// /xmlrpc.php file

include "lib/xmlrpc.inc";
include "lib/xmlrpcs.inc";

// function that handles example.add XML-RPC method
function add ($xmlrpcmsg) 
{

    // ???

    $sumResult = $a + $b;

    // ???

    return new xmlrpcresp($some_xmlrpc_val);
}

// creating XML-RPC server object that handles 1 method
$s = new xmlrpc_server(
    array(
      "example.add" => array("function" => "add")
    ));

どうすれば応答を作成できますか?

XML-RPC呼び出しによってXMLRPCサーバーに渡されるパラメーターsumResultの合計である1つの整数でa応答が必要だとします。b

PHP XML-RPC 3.0.0betaを使用しています(2.2.2も使用できますが、安定しているとマークされているため、3.0.0betaを使用することにしました)。

4

1 に答える 1

6

わかった。

これは、phpxmlrpcライブラリに基づく完全で最も単純なXML-RPCサーバーです。

<?php

// Complete, simplest possible XMLRPC Server implementation
// file: domain.com/xmlrpc.php

include "lib/xmlrpc.inc";     // from http://phpxmlrpc.sourceforge.net/
include "lib/xmlrpcs.inc";    // from http://phpxmlrpc.sourceforge.net/

// function that handles example.add XML-RPC method 
// (function "mapping" is defined in  `new xmlrpc_server` constructor parameter.
function add ($xmlrpcmsg) 
{
    $a = $xmlrpcmsg->getParam(0)->scalarval(); // first parameter becomes variable $a
    $b = $xmlrpcmsg->getParam(1)->scalarval(); // second parameter becomes variable $b

    $result = $a+$b; // calculating result

    $xmlrpcretval = new xmlrpcval($result, "int"); // creating value object
    $xmlrpcresponse = new xmlrpcresp($xmlrpcretval); // creating response object

    return $xmlrpcresponse; // returning response
}

// creating XML-RPC server object that handles 1 method
$s = new xmlrpc_server(
            array(
                "example.add" =>  array( // xml-rpc function/method name
                    "function" => "add", // php function name to use when "example.add" is called
                    "signature" => array(array($xmlrpcInt, $xmlrpcInt, $xmlrpcInt)), // signature with defined IN and OUT parameter types
                    "docstring" =>  'Returns a+b.' // description of method
                    )          
            )
        );

?>

メソッドがパラメータで何をするのか完全には理解してscalarval()いません。オブジェクトを通常の変数/値に変換するだけで、文字列で使用できると思います。

于 2013-02-19T18:33:12.463 に答える