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,和日志。
相关推荐
BingoGo1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1235 天前
matlab画图工具
开发语言·matlab
dustcell.5 天前
haproxy七层代理
java·开发语言·前端