CentOS7 源码编译安装 PHP 8.2.35
步骤 1:安装系统编译依赖
yum install -y epel-release
yum install -y gcc gcc-c++ make autoconf automake bison flex libtool libxml2-devel curl-devel libpng-devel libjpeg-turbo-devel freetype-devel bzip2-devel readline-devel sqlite-devel oniguruma-devel zlib-devel cmake3
# cmake3软链接
ln -s /usr/bin/cmake3 /usr/bin/cmake步骤 2:编译安装 libzip(CentOS7 自带 libzip 版本过低)
cd /root
wget https://libzip.org/download/libzip-1.7.3.tar.gz
tar -zxvf libzip-1.7.3.tar.gz
cd libzip-1.7.3
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/libzip
make
make install
# 设置pkgconfig、库搜索路径
export PKG_CONFIG_PATH=/usr/local/libzip/lib64/pkgconfig:$PKG_CONFIG_PATH
export LD_LIBRARY_PATH=/usr/local/libzip/lib64:$LD_LIBRARY_PATH
cd /root步骤 3:下载 PHP‑8.2.35 源码
wget https://www.php.net/distributions/php-8.2.35.tar.gz
tar -zxvf php-8.2.35.tar.gz
cd php-8.2.35步骤 4:xp_ssl.c 补丁,兼容 OpenSSL‑1.0.2
编辑文件
vi ext/openssl/xp_ssl.c找到文件靠前的 openssl 头文件区域(#include <openssl/xxx.h>这一堆),在任意一条 openssl 头文件后面,增加下面代码,不要修改删除其他任何代码:
#if OPENSSL_VERSION_NUMBER < 0x10100000L
static unsigned char *ASN1_STRING_get0_data(ASN1_STRING *x)
{
return (unsigned char *)x->data;
}
#endif保存退出 :wq
步骤 5:configure 编译配置(关闭 jit 减少内存消耗)
./configure \
--prefix=/usr/local/php82 \
--with-config-file-path=/usr/local/php82/etc \
--with-config-file-scan-dir=/usr/local/php82/etc/conf.d \
--enable-fpm \
--with-fpm-user=apache \
--with-fpm-group=apache \
--enable-cli \
--enable-mbstring \
--enable-xml \
--enable-bcmath \
--enable-fileinfo \
--enable-pdo \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-curl \
--with-openssl \
--with-zlib \
--with-bz2 \
--enable-gd \
--with-freetype \
--with-jpeg \
--with-zip=/usr/local/libzip \
--with-readline \
--disable-jitconfigure 执行结束输出 Thank you for using PHP. 才算成功。

步骤 6:编译 & 安装
makeBuild complete. 代表编译完成,再执行make install。

make install步骤 7:初始化配置文件 php.ini/php‑fpm
# 复制生产php.ini
cp php.ini-production /usr/local/php82/etc/php.ini
# 复制fpm配置
cp sapi/fpm/php-fpm.conf /usr/local/php82/etc/php-fpm.conf
cp sapi/fpm/www.conf /usr/local/php82/etc/php-fpm.d/www.conf(可选)创建 www 运行用户,如已安装其他php版本,可直接使用其他php版本的用户
useradd -M -s /sbin/nologin www修改 php‑fpm.conf,打开 pid 配置
vi /usr/local/php82/etc/php-fpm.conf去掉;pid = run/php-fpm.pid前面分号
pid = run/php-fpm.pid修改 pool 配置 www.conf
vi /usr/local/php82/etc/php-fpm.d/www.conf确认用户组:(如已安装其他php版本,可直接使用其他php版本的用户,如apache)
user = www #apache
group = www #apache如有其他版本php已占用9000端口,需修改端口,如改9001
listen = 127.0.0.1:9001步骤 8:配置 systemd 服务,管理 php‑fpm
vi /usr/lib/systemd/system/php82-fpm.service写入完整内容:
[Unit]
Description=PHP8.2 FPM Service
After=network.target
[Service]
Type=simple
PIDFile=/usr/local/php82/var/run/php-fpm.pid
ExecStart=/usr/local/php82/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php82/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target重载 systemd,启动服务:
systemctl daemon-reload
systemctl start php82-fpm
systemctl enable php82-fpm
systemctl status php82-fpm(可选)创建软连接,shell输入php82可使用php
ln -s /usr/local/php82/bin/php /usr/local/bin/php82
ln -s /usr/local/php82/bin/phpize /usr/local/bin/phpize82
ln -s /usr/local/php82/bin/pecl /usr/local/bin/pecl82
ln -s /usr/local/php82/sbin/php-fpm /usr/local/bin/php82-fpm
报错解决方案
1、.configure报错缺少openssl

安装 openssl-devel
yum install -y openssl-devel2、
如果make过程中提示内存耗尽报错,如下图

可以先新建 8G 临时 swap 文件
# 创建8G swap文件
dd if=/dev/zero of=/root/swapfile8g bs=1M count=8192
chmod 600 /root/swapfile8g
mkswap /root/swapfile8g
swapon /root/swapfile8g编译成功之后,记得删除临时 swap,释放磁盘空间:
swapoff /root/swapfile8g
rm -f /root/swapfile8g