推荐使用 phpxmlrpc 库实现 XML-RPC 服务端和客户端,需通过 Composer 安装,服务端注册方法并调用 service() 处理请求,客户端通过 Client 调用方法并解析 Response,注意类型包装与调试开关设置。
PHP 实现 XML-RPC 服务端和客户端,推荐使用 phpxmlrpc 库(官方维护、兼容 PHP 7/8、支持现代特性),而非已废弃的内置 `xmlrpc_*` 函数(PHP 8.1+ 已移除)。下面以 v4.x 版本为例,给出简洁实用的实现方式。
用 Composer 安装:
composer require phpxmlrpc/phpxmlrpc
确保项目已启用 Composer 自动加载(通常 require '
vendor/autoload.php' 即可)。
服务器接收请求、调用方法、返回响应。核心是注册处理函数并启动服务。
MyApi),把业务逻辑写成 public 方法XmlRpcServer 实例,用 addMethod() 注册方法(支持命名空间)service() 处理 HTTP 请求(通常放在 server.php 中)示例(server.php):
require 'vendor/autoload.php';
use PhpXmlRpc\Server;
use PhpXmlRpc\Request;
use PhpXmlRpc\Response;
use PhpXmlRpc\Value;
class MyApi {
public function sayHello($params) {
$name = $params[0]->scalarval();
return new Response(new Value("Hello, {$name}!"));
}
public function add($params) {
$a = $params[0]->scalarval();
$b = $params[1]->scalarval();
return new Response(new Value($a + $b));
}
}
$server = new Server();
$server->addMethod('myapi.sayHello', [new MyApi(), 'sayHello']);
$server->addMethod('myapi.add', [new MyApi(), 'add']);
$server->service(); // 响应 POST 请求
客户端构造请求、发送、解析响应。关键在 Client 类和 call() 方法。
Client,传入服务端 URL(如 http://localhost/server.php)new Value() 包装参数(支持 int/string/array/struct 等类型)call() 返回 Response 对象,用 value() 提取结果示例(client.php):
require 'vendor/autoload.php';
use PhpXmlRpc\Client;
use PhpXmlRpc\Value;
$client = new Client('http://localhost/server.php');
// 调用 sayHello
$response = $client->call('myapi.sayHello', [new Value('Alice')]);
if ($response->isFault()) {
echo "Error: " . $response->faultString();
} else {
echo $response->value()->scalarval(); // 输出:Hello, Alice!
}
// 调用 add
$response = $client->call('myapi.add', [new Value(3), new Value(5)]);
echo $response->value()->scalarval(); // 输出:8
XML-RPC 类型严格,PHP 数组需明确区分 array(映射为 struct)和 list(映射为 array);调试时可开启日志:
$server->setDebug(2) 查看收发的 XML$client->setDebug(2) 输出原始请求/响应text/xml
基本上就这些。不复杂但容易忽略类型包装和调试开关——跑通第一个 sayHello 就算入门成功了。