在 LAMP 的整体框架下,PHP 是以模块的形式挂接到 Apache 的。作为本系列的最后一环,我们将编译安装 PHP 8.3,并配置它与 Apache 的协同工作。同样,所有命令也写到了一个可执行文件内,可下载后执行:
wget https://blog.nyankowo.com/bash/installphp.sh && chmod +x installphp.sh && bash installphp.sh1. 安装预备软件
根据每家服务商提供的系统镜像不同,系统本身所带的软件包也不相同。编译过程中缺少什么就查漏补缺安装什么。以下是常用的基础开发库:
yum install libxml2-devel sqlite-devel curl-devel libpng-devel libjpeg-devel freetype-devel libxslt-devel cmake3 ImageMagick-devel php-pecl-imagick-devel libsodium php-intl krb5-devel -y2. 安装依赖库
2.1 安装 Oniguruma
Oniguruma 是一个正则表达式库,PHP 的 mbstring 模块依赖于它。在 CentOS 9/Stream 中,暂时还没有 oniguruma-devel 的源,我们需要手动编译。注意 --libdir=/lib64 参数不可少,否则 PHP 可能找不到库文件:
wget https://github.com/kkos/oniguruma/releases/download/v6.9.9/onig-6.9.9.tar.gz -P /usr/local/src
tar -xvf /usr/local/src/onig-6.9.9.tar.gz -C /usr/local/src && cd /usr/local/src/onig-6.9.9
./configure --prefix=/usr/local/oniguruma --libdir=/lib64 && make && make install2.2 安装 Libzip
在编译 PHP 时通常会提示系统自带的 Libzip 版本过低(PHP 扩展需要更新版本的 zip 支持),所以我们需要编译一份新版的 Libzip:
wget https://libzip.org/download/libzip-1.11.1.tar.gz -P /usr/local/src
tar -xvf /usr/local/src/libzip-1.11.1.tar.gz -C /usr/local/src && cd /usr/local/src/libzip-1.11.1
cmake3 -DCMAKE_INSTALL_PREFIX=/usr/local/libzip && make && make install2.3 编译 UW IMAP
如果你需要使用 PHP 的 Mail 相关功能,通常需要 IMAP 支持。这是一个较老的库,需要特殊处理:
wget https://www.mirrorservice.org/sites/ftp.cac.washington.edu/imap/imap-2007f.tar.gz -P /usr/local/src
tar -xvf /usr/local/src/imap-2007f.tar.gz -C /usr/local/src && cd /usr/local/src/imap-2007f
# 针对 Linux 环境编译,忽略 SSL 类型并添加必要的链接库
make lnx SSLTYPE=none EXTRACFLAGS="-fPIC" EXTRALDFLAGS="-lcrypt"
# 手动复制头文件和库文件
mkdir -p /usr/local/c-client/include /usr/local/c-client/lib
cp -f c-client/*.h /usr/local/c-client/include/
cp -f c-client/*.c /usr/local/c-client/lib/
cp -f c-client/c-client.a /usr/local/c-client/lib/libc-client.a
ln -s /usr/local/c-client/lib/libc-client.a /usr/lib64/libc-client.so3. 编译安装 PHP 8.3
对于不同版本的 PHP,所用的参数有些不同。PHP 8 相比于 PHP 7 废弃了很多旧参数。以下配置集成了 Apache 模块 (apxs2)、MySQL 驱动 (mysqlnd) 以及我们刚才安装的各种依赖库:
wget https://www.php.net/distributions/php-8.3.12.tar.gz -P /usr/local/src
tar -xvf /usr/local/src/php-8.3.12.tar.gz -C /usr/local/src && cd /usr/local/src/php-8.3.12
# 编译配置 (长命令)
./configure \
--prefix=/usr/local/php \
--enable-fpm \
--with-fpm-user=apache \
--with-fpm-group=apache \
--with-mysql-sock=/usr/local/mariadb/sock/mysql.sock \
--with-config-file-path=/usr/local/php/etc \
--with-openssl \
--with-zlib \
--with-freetype \
--enable-gd \
--with-jpeg \
--enable-short-tags \
--enable-sockets \
--enable-mbstring \
--enable-soap \
--enable-static \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--enable-mysqlnd-compression-support \
--with-curl \
--with-xsl \
--enable-ftp \
--with-libxml \
--enable-exif \
--enable-calendar \
--with-zip \
--with-sodium \
--with-imap=/usr/local/c-client \
--enable-bcmath \
--with-kerberos \
PKG_CONFIG_PATH=/usr/local/libzip/lib64/pkgconfig \
--enable-intl
# 开始编译安装
make && make install
# 收尾工作:配置 libtool 并复制配置文件
libtool --finish /usr/local/src/php-8.3.12/libs
mkdir /usr/local/php/etc && cp php.ini-production /usr/local/php/etc/php.ini 安装完成后,建议对 PHP 配置文件 (php.ini) 进行初步修改,以适配生产环境需求(例如增加文件上传大小限制):
upload_max_filesize = 512M
memory_limit = 512M
post_max_size = 512M
max_execution_time = 300[!WARNING] 编译时的内存问题
编译 PHP 非常消耗内存。如果你的 VPS 内存小于 1.5GB,很可能会报错make: *** [Makefile:909: ext/fileinfo/libmagic/apprentice.lo] Error 1。此时需要临时增加 SWAP(交换空间)来解决:
- 查看当前 swap:
free -h- 创建 4GB 交换文件:
dd if=/dev/zero of=/mnt/swap bs=1M count=4096- 格式化为 swap:
mkswap /mnt/swap- 启用 swap:
swapon /mnt/swap- (可选) 设置开机挂载:在
/etc/fstab添加/mnt/swap swap swap defaults 0 0- 优化使用策略:修改
/etc/sysctl.conf中的vm.swappiness = 70(表示空闲内存少于 70% 时即开始使用 SWAP)。
4. 配置 Apache 解析 PHP
PHP 安装好后,还需要告诉 Apache 如何处理 .php 后缀的文件。打开 Apache 主配置文件 httpd.conf:
- 加载模块:检查是否已有
LoadModule proxy_module modules/mod_proxy.so、LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so(通常编译安装会自动添加,确保未被注释)。 设置 Handler:在配置文件空白处(或
<IfModule mime_module>内)添加:<FilesMatch \.php$> SetHandler "proxy:unix:/run/php-fpm.sock|fcgi://localhost" </FilesMatch>修改默认页:找到
<DirectoryIndex>,将index.php添加到index.html前面:DirectoryIndex index.php index.html- 重启 Apache:
apachectl restart - 配置权限:
chown apache:apache /run/php-fpm.sock
5. 验证安装
在网站根目录 (htdocs) 下新建一个 index.php 文件,输入以下内容:
<?php phpinfo(); ?> 访问网站(如 http://your-ip/index.php),如果出现如下图所示的紫色配置详情页面,就说明 PHP 8.3 已成功挂载到 Apache 上,LAMP 环境搭建圆满完成!
