PHP原生xmlrpc扩展在PHP 8.0+中已被移除,唯一可靠方案是composer require phpxmlrpc/polyfill-xmlrpc,它纯PHP实现、自动注册全部原生函数、无需修改代码或重启PHP。

PHP 原生 xmlrpc 扩展在现代环境里基本不可靠——它在 PHP 8.0+ 中被废弃,Ubuntu/Debian 新发行版默认不装,Docker 镜像几乎都不带,硬装还常因依赖冲突失败。别折腾编译或改 php.ini,直接用 phpxmlrpc/polyfill-xmlrpc 就行,它让所有 xmlrpc_encode_request()、xmlrpc_decode() 等函数原样可用,纯 PHP 实现,无扩展依赖。
为什么不能直接 composer require php-xmlrpc
搜到的 php-xmlrpc(如 eduardokum/laravel-xmlrpc)大多是 Laravel 封装包,底层仍依赖原生扩展;而官方推荐的 phpxmlrpc/phpxmlrpc 库本身是完整实现,但需手动初始化 client/server,不兼容原生函数调用。真正能“零修改代码”替代原生扩展的,只有它的 polyfill 包:phpxmlrpc/polyfill-xmlrpc。
- 它会自动注册
xmlrpc_encode_request()、xmlrpc_decode()、xmlrpc_client类等全部接口 - 无需
require_once或手动加载,Composer 自动注入到全局作用域 - 支持 PHP 5.4–8.3,包括你正在用的 PHP 8.1/8.2 Docker 环境
安装后怎么写客户端调用
安装完就能直接用老代码,比如原来这样:
$client = new xmlrpc_client('http://api.example.com/');
$request = xmlrpc_encode_request('user.login', ['admin', 'pass123']);
$response = $client->send($request);
$result = xmlrpc_decode($response->value());
现在完全不用改——只要确保 composer autoloader 已引入(通常 require 'vendor/autoload.php' 就够)。polyfill 会接管所有函数调用,内部转成 phpxmlrpc/phpxmlrpc 的 Client 实例执行。
立即学习“PHP免费学习笔记(深入)”;
- 参数类型仍要按旧规:用
new xmlrpcval('string', 'string')构造,polyfill 兼容该语法 - 错误处理不变:
$response->faultCode() !== 0依然有效 - 若遇到
Call to undefined function xmlrpc_encode_request(),说明 autoloader 没生效或未执行composer install
服务端兼容性要注意什么
polyfill 只补全客户端函数,xmlrpc_server_create() 等服务端函数它不提供。如果你要写 PHP XML-RPC 服务端,得换方案:
- 用
phpxmlrpc/phpxmlrpc库的Server类,手动路由请求 - 或者直接用 Python/Node.js 写服务端(XML-RPC 天然跨语言),PHP 只做 client
- 老项目里混用服务端逻辑?必须把
xmlrpc_server_*函数替换成phpxmlrpc的Server实例 + 白名单方法注册
别指望 polyfill 自动兜底服务端——它只解决“调用方没扩展”的问题,不是万能胶。



















