PHP 7.4 在 AlmaLinux 10.1 系统上编译时,与系统中高版本的 libxml2 库存在兼容性问题,具体表现为函数参数类型不匹配和废弃函数调用。下面我会给你提供完整的解决方案。
问题分析- 核心错误:xmlSetStructuredErrorFunc 函数期望接收 const struct _xmlError * 类型的参数,但 PHP 7.4 源码中传递的是非 const 类型,导致类型不兼容。
- 环境原因:AlmaLinux 10.1 自带的 libxml2 版本较高(新增了 const 修饰),而 PHP 7.4 是较老的版本,源码未适配该变化。
- 次要警告:xmlRelaxNGCleanupTypes 函数已被废弃,也需要适配。
从 libxml2 2.9.x 系列(包括 2.9.12)开始,xmlSetStructuredErrorFunc 等函数的参数已新增 const 修饰(如 const struct _xmlError *),而 PHP 7.4 源码中对应的函数参数未添加 const,导致类型不兼容 —— 这正是你之前编译失败的核心原因。2.9.12 作为 2.9.x 系列的后续版本,延续了该接口设计,并未回滚或兼容旧版 PHP 的写法。
无额外收益:libxml2 2.9.12 的更新主要集中在安全补丁和细节优化,并未针对旧版 PHP 做兼容性适配,升级后无法解决编译问题,反而可能因版本差异引入新的依赖冲突。
要在 AlmaLinux 10 上安装 PHP 7.4,请按照以下步骤启用 Remi 仓库,安装 PHP 核心包,并添加常用扩展。 步骤1:先更新所有系统包: sudo dnf update -y
 步骤2:安装Remi仓库包: sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-10.rpm -y
 步骤3:列出可用的PHP模块流: sudo dnf module list php
 步骤4:重置默认PHP模块并启用PHP 7.4: sudo dnf module reset php -ysudo dnf module enable php:remi-7.4 -y
步骤5:安装PHP 7.4核心组件: sudo dnf install -y php74 php74-php-fpm php74-php-cli
步骤6:安装常用的PHP扩展: sudo dnf install -y php74-php-{mysqlnd,curl,gd,mcrypt,json,pear,common,xml,zip,devel,xsl,soap,bcmath,mbstring,gettext,imagick}
- mysqlnd – PHP原生MySQL驱动程序
- curl – 启用 HTTP 和 API 请求
- GD——图像处理与处理
- mcrypt – 加密功能(遗留支持)
- json – JSON data handling
- pear – PHP 扩展与应用仓库
- common – 核心PHP文件和依赖
- xml——XML 解析与处理
- zip – ZIP 归档管理
- Devel – PHP 开发头部
- xsl – XSLT 变换
- soap – SOAP 协议支持
- bcmath – 任意精确数学
- mbstring – 多字节字符串处理
- gettext – 本地化与翻译
- imagick – 使用ImageMagick的高级图像处理
步骤7:检查已安装的PHP版本: php74 -v
恭喜你!您已成功在 AlmaLinux 10 上安装了 PHP 7.4 及必要的扩展,您的系统现在已准备好进行 PHP 应用开发或托管。
|