Rock笔记
~/rocknotes/articles/430.md article
// article · linux

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-jit

configure 执行结束输出 Thank you for using PHP. 才算成功。

image.png


步骤 6:编译 & 安装

make

Build complete. 代表编译完成,再执行make install。

image.png

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

image.png



报错解决方案

1、.configure报错缺少openssl

image.png


安装 openssl-devel

yum install -y openssl-devel



2、

如果make过程中提示内存耗尽报错,如下图

image.png

可以先新建 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


回复// 0 replies

最新回复 ↓
// 暂无回复

回复功能沿用原详情页:前往原页面参与讨论 →