php多版本编译安装

实验工具条件:

  • 已安装 Apache(Ubuntu 默认 MPM 为 Event;Rocky 默认 MPM 为 Prefork 或 Event,根据安装)。
  • 以 root 用户身份执行命令。
  • 系统:Ubuntu 24.04(使用 apt)或 Rocky Linux 9(使用 dnf)。
  • 注意:mod_php 要求 Apache 使用 Prefork MPM 模型,但 Rocky Linux 9 不支持 mod_php;FPM 无此限制,且是 Rocky 的默认/唯一推荐方式。
  • 潜在问题:如果 Apache 无法启动,检查 MPM 模型兼容性(使用系统特定的模块检查命令)。PHP 版本可能为 8.3 或类似,根据系统仓库更新。在 Rocky 上,安装 php 仅提供 CLI 和扩展,不加载 mod_php。

1.2 PHP 环境配置

1.2.1 模块形式 - 安装 PHP 软件

模块形式将 PHP 嵌入 Apache 进程,适合简单环境,但资源消耗较高。注意:此方式仅适用于 Ubuntu 24.04;Rocky Linux 9 不支持 mod_php(无对应包和模块)。

Ubuntu 24.04
  1. 检查初始状态:

    复制代码
    apache2ctl -M | grep mpm  # 预期输出:mpm_event_module (shared) 或类似
    apache2ctl -M | grep php  # 预期无输出(未安装 PHP)
  2. 安装 PHP:

    复制代码
    apt update -y && apt install php -y
  3. 验证安装:

    复制代码
    ls /etc/php/8.3  # 预期输出:apache2 cli mods-available
    apache2ctl -M | grep mpm  # 预期输出:mpm_prefork_module (shared)
    ls /etc/apache2/mods-enabled/mpm*  # 预期输出:mpm_prefork.conf mpm_prefork.load
    apache2ctl -M | grep php  # 预期输出:php_module (shared)
    ls /etc/apache2/mods-enabled/php*  # 预期输出:php8.3.conf php8.3.load

    排查提示: 如果 MPM 未切换为 Prefork,手动编辑 /etc/apache2/mods-available/mpm_prefork.load 并启用(使用 a2enmod mpm_prefork && a2dismod mpm_event)。

Rocky Linux 9

不支持 mod_php。 请直接使用 FPM 方式(见 1.7.2.3)。如果安装 php:

复制代码
dnf update -y && dnf install php -y
  • 验证:httpd -M | grep php 将无输出;ls /etc/httpd/conf.modules.d/*php* 将显示无文件。继续到 FPM 安装。

1.2.2 模块形式 - Apache 应用 PHP

配置 Apache 处理 PHP 文件。注意:此方式仅适用于 Ubuntu 24.04;Rocky Linux 9 不支持 mod_php。

Ubuntu 24.04
  1. 定制默认虚拟主机:

    复制代码
    rm -f /etc/apache2/sites-enabled/vhost.conf
    ln -sf /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-enabled/
  2. 创建测试 PHP 文件:

    复制代码
    echo '<?php phpinfo(); ?>' > /var/www/html/index.php
  3. 重启 Apache 并验证:

    复制代码
    systemctl restart apache2.service
    • 浏览器访问 http://<服务器IP>/index.php(例如 http://10.0.0.13/index.php),预期显示 PHP 信息页面。
      排查提示: 如果页面空白,检查日志:journalctl -u apache2.service -xe/var/log/apache2/error.log
Rocky Linux 9

不支持 mod_php。 请直接使用 FPM 方式(见 1.7.2.4)。测试文件可创建,但需 FPM 配置后验证。

1.2.3 FPM 方式 - 部署 PHP 软件

FPM 提供独立进程管理,支持动态调整,适合高负载。这是 Rocky Linux 9 的推荐/唯一方式。

Ubuntu 24.04
  1. 安装 PHP-FPM:

    复制代码
    apt install php-fpm -y
  2. 确认配置:

    复制代码
    ls /etc/php/8.3  # 预期输出:apache2 cli fpm mods-available
    cat /etc/php/8.3/fpm/pool.d/www.conf  # 检查 listen = /run/php/php8.3-fpm.sock 或 127.0.0.1:9000
  3. 服务状态:

    复制代码
    systemctl is-active php8.3-fpm.service  # 预期输出:active
    ps aux | grep php-fpm  # 查看 master 和 pool 进程

    排查提示: 如果服务未启动:systemctl enable --now php8.3-fpm.service

Rocky Linux 9
  1. 安装 PHP-FPM:

    复制代码
    dnf install php-fpm -y
  2. 确认配置:

    复制代码
    ls /etc/php-fpm.d  # 预期输出:www.conf 等
    cat /etc/php-fpm.d/www.conf  # 检查 listen = /run/php-fpm/www.sock 或 127.0.0.1:9000
  3. 服务状态:

    复制代码
    systemctl is-active php-fpm.service  # 预期输出:active
    ps aux | grep php-fpm  # 查看 master 和 pool 进程

    排查提示: 如果服务未启动:systemctl enable --now php-fpm.service。检查 SELinux:setsebool -P httpd_can_network_connect 1 如果使用 TCP。

1.2.4 FPM 方式 - Apache 应用 PHP

使用 Proxy FCGI 代理请求到 FPM。

Ubuntu 24.04
  1. 准备 Apache 配置:

    复制代码
    cd /etc/apache2/mods-enabled/
    rm -rf php8.3.*
    ln -sfv ../mods-available/proxy_fcgi.load ./proxy_fcgi.load
    ln -sfv ../mods-available/proxy.conf ./proxy.conf
    ln -sfv ../mods-available/proxy.load ./proxy.load
  2. 配置代理:

    复制代码
    cat > /etc/apache2/mods-enabled/proxy.conf <<-EOF
    <FilesMatch ".+\.ph(ar|p|tml)$">
        SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost"
    </FilesMatch>
    EOF
  3. 重启并验证:

    复制代码
    systemctl restart apache2.service
    apache2ctl -M | grep proxy  # 预期输出:proxy_module (shared) proxy_fcgi_module (shared)
    • 浏览器访问测试页(创建如 1.7.2.2 中的 index.php)。
      排查提示: 检查 Socket 权限:chown www-data:www-data /run/php/php8.3-fpm.sock
Rocky Linux 9
  1. 准备 Apache 配置:

    复制代码
    cd /etc/httpd/conf.modules.d/
    rm -f 10-php.conf  # 或类似 mod_php 文件(如果存在,通常不存在)
    echo 'LoadModule proxy_module modules/mod_proxy.so' >> 00-proxy.conf
    echo 'LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so' >> 00-proxy.conf
  2. 配置代理:

    复制代码
    cat > /etc/httpd/conf.d/php-fpm.conf <<-EOF
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
    </FilesMatch>
    EOF
  3. 重启并验证:

    复制代码
    systemctl restart httpd.service
    httpd -M | grep proxy  # 预期输出:proxy_module (shared) proxy_fcgi_module (shared)
    • 浏览器访问测试页(创建 echo '<?php phpinfo(); ?>' > /var/www/html/index.php)。
      排查提示: 检查 Socket 权限:chown apache:apache /run/php-fpm/www.sock。SELinux:setsebool -P httpd_can_network_connect 1

1.2.5 PHP 加速配置实践

使用 OPcache 缓存字节码,提升 PHP 性能。

Ubuntu 24.04
  1. 简介: OPcache 减少代码解析开销。

  2. 检查与配置:

    复制代码
    ls /etc/php/8.3/fpm/conf.d/*opcache*  # 预期输出:10-opcache.ini
    cat /etc/php/8.3/fpm/conf.d/10-opcache.ini  # 检查 zend_extension=opcache.so
    • 编辑启用:echo 'opcache.enable=1' >> /etc/php/8.3/fpm/conf.d/10-opcache.ini
  3. 重启:

    复制代码
    systemctl restart php8.3-fpm.service

    排查提示: php -i | grep opcache 检查状态。

Rocky Linux 9
  1. 简介: OPcache 减少代码解析开销。

  2. 检查与配置:

    复制代码
    ls /etc/php.d/*opcache*  # 预期输出:10-opcache.ini
    cat /etc/php.d/10-opcache.ini  # 检查 zend_extension=opcache.so
    • 编辑启用:echo 'opcache.enable=1' >> /etc/php.d/10-opcache.ini
  3. 重启:

    复制代码
    systemctl restart php-fpm.service

    排查提示: php -i | grep opcache 检查状态。

1.3 博客案例

1.3.1 案例解读

Ubuntu 24.04
  1. WordPress 简介: 开源 CMS,用于博客/网站构建,依赖 PHP 和数据库。

  2. 部署流程(推荐 FPM):

    复制代码
    apt install mariadb-server -y
    systemctl enable --now mariadb.service
    cd /var/www/html
    wget https://wordpress.org/latest.tar.gz
    tar -xzf latest.tar.gz && mv wordpress/* . && rm -rf wordpress latest.tar.gz
    chown -R www-data:www-data .
    apt install php-mysql php-gd php-curl -y
    • 配置数据库:mysql -u root -p 创建数据库/用户。
    • 编辑 wp-config.php 设置 DB 连接。
    • 重启:systemctl restart apache2.service
    • 浏览器访问完成安装。
      排查提示: 检查权限和日志。
Rocky Linux 9
  1. WordPress 简介: 开源 CMS,用于博客/网站构建,依赖 PHP 和数据库。

  2. 部署流程(推荐 FPM):

    复制代码
    dnf install mariadb-server -y
    systemctl enable --now mariadb.service
    cd /var/www/html
    wget https://wordpress.org/latest.tar.gz
    tar -xzf latest.tar.gz && mv wordpress/* . && rm -rf wordpress latest.tar.gz
    chown -R apache:apache .
    dnf install php-mysqlnd php-gd php-curl -y
    • 配置数据库:mysql -u root -p 创建数据库/用户。
    • 编辑 wp-config.php 设置 DB 连接。
    • 重启:systemctl restart httpd.service
    • 浏览器访问完成安装。
      排查提示: 检查 SELinux:setsebool -P httpd_unified 1,和日志。
相关推荐
晚枫歌F3 分钟前
io_uring的介绍和实现
开发语言·php
时光追逐者15 分钟前
TIOBE 公布 C# 是 2025 年度编程语言
开发语言·c#·.net·.net core·tiobe
花归去17 分钟前
echarts 柱状图曲线图
开发语言·前端·javascript
2501_9418705635 分钟前
面向微服务熔断与流量削峰策略的互联网系统稳定性设计与多语言工程实践分享
开发语言·python
modelmd40 分钟前
Go 编程语言指南 练习题目分享
开发语言·学习·golang
带土11 小时前
4. C++ static关键字
开发语言·c++
C++ 老炮儿的技术栈1 小时前
什么是通信规约
开发语言·数据结构·c++·windows·算法·安全·链表
@大迁世界1 小时前
TypeScript 的本质并非类型,而是信任
开发语言·前端·javascript·typescript·ecmascript
栗子叶1 小时前
Java对象创建的过程
java·开发语言·jvm
Amumu121381 小时前
React面向组件编程
开发语言·前端·javascript