xmlrpc 扩展在 PHP 8.0+ 中已被移除,PECL 版本编译失败率高且无 macOS 官方支持;唯一可靠方案是使用 composer require phpxmlrpc/polyfill-xmlrpc,该 polyfill 纯 PHP 实现、完全兼容原生函数签名,无需修改代码或重启 PHP。

xmlrpc 扩展在 PHP 8.0+ 中**已被移除**,官方不再维护,PECL 上的 xmlrpc-1.0.0RC2 仅是实验性兼容包,编译失败率高、无 macOS 官方支持、且与现代 libxml 版本存在符号冲突。直接走 PECL 编译这条路,在 macOS(尤其是 Apple Silicon)或主流 Linux 发行版上极大概率卡在 make 或 phpize 阶段。
为什么 PECL xmlrpc 扩展在 PHP 8.0+ 上基本不可用
PHP 8.0 彻底剥离了旧式 XML-RPC 实现,依赖已废弃的 xml_parser 和 libxml2 低层 API。PECL 的 xmlrpc 包未适配 PHP 8 的 ZTS 变更、内存模型调整和类型系统强化。常见报错包括:
error: use of undeclared identifier 'XML_Error'-
undefined symbol: xmlrpc_server_create(链接时找不到符号) -
configure: error: xmlrpc needs libxml2(即使已装 libxml2,版本不匹配也会失败)
macOS 上还额外受 SIP 保护、Homebrew libxml2 默认不暴露头文件路径、phpize 调用错误 SDK 等问题干扰。
composer require phpxmlrpc/polyfill-xmlrpc 是唯一可靠方案
这个 polyfill 不是“模拟”,而是完整重实现所有原生函数签名,包括:
-
xmlrpc_encode()/xmlrpc_decode() -
xmlrpc_encode_request()/xmlrpc_decode_request() -
xmlrpc_server_create()/xmlrpc_server_call_method() -
xmlrpc_is_fault()/xmlrpc_get_type()
它完全绕过 C 扩展依赖,纯 PHP 实现,自动注册到全局命名空间。你只需:
立即学习“PHP免费学习笔记(深入)”;
- 运行
composer require phpxmlrpc/polyfill-xmlrpc - 确保项目加载了
vendor/autoload.php - 原有代码无需任何修改,直接运行
验证方式:写个 test.php,调用 xmlrpc_encode(['a' => 1]),能返回合法 XML 字符串即成功——不用重启 PHP、不用改 php.ini、不碰 extension= 行。
如果你坚持要试 PECL 编译(不推荐)
仅限 x86_64 Linux + PHP 源码编译环境,且你清楚自己在做什么:
- 必须使用 PHP 源码树中的
ext/xmlrpc(不是 PECL 单独包),否则头文件缺失 -
./configure必须加--with-xmlrpc --enable-libxml,且 libxml2 开发包已安装(如libxml2-dev) - 不能用 Homebrew 安装的 PHP,必须从源码编译 PHP 本身,否则
php-config路径错乱 - macOS 上基本放弃:Apple Clang 对旧 C 标准支持差,
xmlrpc里大量register关键字导致编译失败
即便编译通过,xmlrpc_server_* 系列函数在 PHP 8.1+ 会触发 Deprecated 警告,8.2+ 直接 fatal error——这不是配置问题,是语言层废弃。
phpxmlrpc/polyfill-xmlrpc 已经把所有函数名、参数顺序、返回值行为、甚至 fault 错误结构都对齐了原生扩展。它不是“将就”,而是当前事实标准。



















