建立服務對應表,將方法名稱映射到 PHP 函數(方法處理器):
<?php
include("xmlrpc.inc");
include("xmlrpcs.inc");
function foo($params) {
global $xmlrpcerruser;
// $params 為 xmlrpcval 陣列
$vala = $params->params[0]; // 取第一個參數
$sval = $vala->scalarval(); // 轉標量
$ret = $sval * 2; // 業務邏輯:乘 2
return new xmlrpcresp(new xmlrpcval($ret, "int"));
}
// 註冊:methodName "product" 對應 function "foo"
$s = new xmlrpc_server(array(
"product" => array("function" => "foo")
));
?>
$params 為 xmlrpcval 物件陣列new xmlrpcresp(new xmlrpcval($result, $type))new xmlrpcresp(0, $xmlrpcerruser+1, "錯誤訊息")"int", "boolean", "string", "double", "dateTime.iso8601", "base64", "array", "struct"<?php
include("xmlrpc.inc");
include("xmlrpcs.inc");
function foo($params) {
global $xmlrpcerruser;
$vala = $params->params[0];
$sval = $vala->scalarval();
$ret = $sval * 2;
return new xmlrpcresp(new xmlrpcval($ret, "int"));
}
$s = new xmlrpc_server(array(
"product" => array("function" => "foo")
));
?>
<?php
include("xmlrpc.inc");
if ($HTTP_POST_VARS["number"] != "") {
$f = new xmlrpcmsg('product', array(new xmlrpcval($HTTP_POST_VARS["number"], "int")));
$c = new xmlrpc_client("/xmlrpc/servfoo.php", "luigi.melpomenia.com.ar", 80);
$c->setDebug(0);
$r = $c->send($f);
$v = $r->value();
if (!$r->faultCode()) {
print "Number " . $HTTP_POST_VARS["number"] . " is " . $v->scalarval() . "<BR>";
print "<HR>伺服器結果<BR><PRE>" . htmlentities($r->serialize()) . "</PRE><HR>";
} else {
print "操作失敗: 代碼 " . $r->faultCode() . " 原因: '" . $r->faultString() . "'<BR>";
}
}
print "<FORM METHOD='POST'>
<INPUT NAME='number' VALUE='${number}'>
<INPUT TYPE='SUBMIT' VALUE='go' NAME='submit'></FORM><P>
輸入一個數值";
?>
servfoo.php 放入 Web 根目錄 /xmlrpc/xmlrpc.inc/xmlrpcs.inc 在 include_pathclient.php,輸入數字送出,觀察結果$c->setDebug(1) 可看原始 HTTP 往返XML-RPC 以簡單、標準、跨語言特性,成為早期 Web 服務基石。雖現代架構多轉向 REST/JSON 或 gRPC,但理解 XML-RPC 有助於掌握分布式服務核心概念:契約優先、序列化、傳輸解耦、異構互通。許多企業內部系統仍在穩定運行,維護技能依具價值。