Ubuntu 22.04 LTS手动编译PHP 7.4.30遇OpenSSL兼容问题
结论
可以在Ubuntu Server 22.04 LTS上完成PHP 7.4.x的手动编译,出现OSSL_DEPRECATEDIN_3_0报错的核心原因是版本适配断层:
- Ubuntu 22.04 系统默认预装OpenSSL 3.0,而PHP 7.4的官方维护终止于OpenSSL 3.0正式发布前,源码中调用的大量OpenSSL 1.1.x版本接口在OpenSSL 3.0中被标记为废弃、部分接口被直接移除,直接用系统默认OpenSSL编译必然触发报错。
- Ubuntu 18.04默认预装OpenSSL 1.1.x,和PHP7.4的适配要求完全匹配,因此相同编译流程可以正常执行。
可行编译方案
推荐两种无系统侵入性的方案,不会破坏Ubuntu 22.04原有系统依赖:
方案1:独立编译OpenSSL 1.1.1(兼容性最优,无代码修改)
这个方案完全复刻Ubuntu 18.04的OpenSSL依赖环境,不需要修改PHP源码,不会出现隐藏兼容问题:
- 第一步先安装PHP编译所需的基础依赖:
sudo apt update && sudo apt install build-essential autoconf bison re2c libxml2-dev libsqlite3-dev libcurl4-openssl-dev libpng-dev libjpeg-dev libonig-dev libzip-dev pkg-config zlib1g-dev
- 下载OpenSSL 1.1.1系列最终稳定版(1.1.1w)源码,解压后执行编译安装,必须指定独立安装目录,绝对不能覆盖系统自带的OpenSSL 3.0,否则会导致apt、ssh等系统核心组件失效:
cd openssl-1.1.1w ./config --prefix=/usr/local/openssl-1.1 --openssldir=/usr/local/openssl-1.1 shared zlib make -j$(nproc) sudo make install
- 进入PHP 7.4.x源码目录,执行configure配置时,手动指定OpenSSL的路径为刚才独立安装的1.1.1版本,后面追加你需要的其他PHP扩展编译参数即可:
./configure --with-openssl=/usr/local/openssl-1.1 # 其他参数按需添加,例如 --with-curl --with-mysqli --with-zip 等
- 后续按正常流程执行
make -j$(nproc)、sudo make install即可完成编译,全程不会触发OpenSSL 3.0相关的废弃接口报错。
方案2:给PHP7.4源码打OpenSSL3兼容补丁
如果不想额外编译独立版本的OpenSSL,可以直接给PHP7.4源码打社区维护的兼容补丁,适配系统自带的OpenSSL 3.0:
- 安装完基础编译依赖后,下载PHP7.4.x源码并解压进入源码目录
- 打入对应小版本的OpenSSL3兼容补丁,补丁会自动替换源码中不兼容OpenSSL3的接口调用
- 正常执行configure配置(不需要额外指定openssl路径)、编译安装即可。
注意事项
禁止通过apt强制卸载、降级系统自带的OpenSSL 3.0版本。Ubuntu 22.04的包管理工具、远程连接服务、网络请求组件等大量核心程序都依赖OpenSSL3,强制替换版本会直接导致系统崩溃、无法远程连接。
内容的提问来源于stack exchange,提问作者paj
相关产品推荐
相关产品推荐

