温馨提示×

Linux下PHP如何进行版本管理

小樊
33
2025-12-24 03:58:51
栏目: 编程语言

Linux下PHP版本管理实用指南

一、方案总览

  • 发行版仓库 + 多版本包:在 Debian/Ubuntu 使用 Ondřej Surý 的 PPA(ppa:ondrej/php) 安装多个并行版本(如 php7.4、php8.0、php8.1、php8.2),配合 update-alternatives 或按需启用不同版本;在 RHEL/CentOS 使用 Remi 仓库 实现多版本并行。适合快速落地、系统级管理。
  • PHP 版本管理器:使用 phpbrew(编译安装、隔离环境、按项目切换)或 phpenv + php-build(rbenv 风格、插件化安装),适合开发与测试,能精细控制编译选项与扩展。
  • Web 服务侧多版本共存:以 PHP-FPM 为核心,给不同版本分配不同 端口(如 9000/9001)Unix Socket(如 /run/php/php7.4-fpm.sock、/run/php/php8.2-fpm.sock),再由 Nginx/Apache 按虚拟主机或目录选择对应版本。适合一台机器服务多个项目、各版本长期并存。

二、发行版仓库快速安装与切换(Ubuntu/Debian 示例)

  • 添加仓库并安装多版本 CLI/FPM(示例为 php7.4、php8.2):
    • sudo apt-get update
    • sudo apt-get install -y software-properties-common
    • sudo add-apt-repository -y ppa:ondrej/php
    • sudo apt-get update
    • sudo apt-get install -y php7.4-cli php7.4-fpm php8.2-cli php8.2-fpm
  • 命令行快速切换默认版本(系统级):
    • sudo update-alternatives --set php /usr/bin/php7.4
    • sudo update-alternatives --set php /usr/bin/php8.2
    • 验证:php -v
  • 按需启用模块(示例为 CLI 与 FPM):
    • sudo a2enmod php7.4
    • sudo a2enmod php8.2
    • sudo systemctl restart apache2
  • 说明:FPM 实例会分别以 php7.4-fpm、php8.2-fpm 服务运行,后续在 Web 服务侧按虚拟主机选择对应实例即可。

三、使用版本管理器 phpbrew(适合开发与隔离)

  • 安装与初始化:
    • sudo apt-get install -y git
    • git clone https://github.com/phpbrew/phpbrew.git /usr/src/phpbrew
    • cd /usr/src/phpbrew && ./phpbrew init
    • echo ‘[[ -e ~/.phpbrew/bashrc ]] && source ~/.phpbrew/bashrc’ >> ~/.bashrc
    • source ~/.bashrc
  • 安装与切换版本(示例为 7.4.33):
    • phpbrew install 7.4.33 +default
    • phpbrew switch 7.4.33
    • 验证:php -v
  • 提示:phpbrew 会在用户目录编译并管理多版本,互不干扰;适合在 CLIFPM(需自行配置 pool) 场景中使用。

四、使用 phpenv + php-build(rbenv 风格)

  • 安装 phpenv 与 php-build:
    • git clone https://github.com/CHH/phpenv.git ~/.phpenv
    • echo ‘export PATH=“$HOME/.phpenv/bin:$PATH”’ >> ~/.bashrc
    • echo ‘eval “$(phpenv init -)”’ >> ~/.bashrc
    • source ~/.bashrc
    • git clone https://github.com/CHH/php-build.git ~/.phpenv/plugins/php-build
  • 安装与切换版本:
    • phpenv install --list
    • phpenv install 7.4.33
    • phpenv local 7.4.33 # 当前项目目录生效
    • phpenv versions # 查看已装版本
  • 说明:与 rbenv 类似,支持 项目级版本全局版本,便于团队协作与 CI。

五、Web 服务侧多版本共存与切换(Nginx + PHP-FPM 实战)

  • 架构要点:不同版本的 PHP-FPM 监听不同 TCP 端口Unix Socket,Nginx 在 server 块 中通过 fastcgi_pass 指定对应目标,实现同机多版本并行。
  • 方案一(TCP 端口,示例:php7.4 用 9000,php8.2 用 9001
    • FPM 配置(/etc/php/7.4/fpm/pool.d/www.conf 与 8.2 的对应文件):
      • listen = 127.0.0.1:9000 # php7.4
      • listen = 127.0.0.1:9001 # php8.2
    • Nginx 配置片段:
      • server {
        • listen 80; server_name app74.test; root /var/www/app74;
        • location ~ .php$ {
          • include snippets/fastcgi-php.conf;
          • fastcgi_pass 127.0.0.1:9000;
        • }
      • }
      • server {
        • listen 80; server_name app82.test; root /var/www/app82;
        • location ~ .php$ {
          • include snippets/fastcgi-php.conf;
          • fastcgi_pass 127.0.0.1:9001;
        • }
      • }
  • 方案二(Unix Socket,示例:/run/php/php7.4-fpm.sock、/run/php/php8.2-fpm.sock)
    • FPM 配置:
      • listen = /run/php/php7.4-fpm.sock
      • listen = /run/php/php8.2-fpm.sock
    • Nginx 配置片段:
      • fastcgi_pass unix:/run/php/php7.4-fpm.sock; # 或 php8.2-fpm.sock
  • 生效与验证:
    • 重启服务:sudo systemctl restart php7.4-fpm php8.2-fpm nginx
    • 创建测试文件:echo “<?php phpinfo();” | sudo tee /var/www/app74/info.php
    • 访问对应域名查看 PHP 版本SAPI/FPM 信息

0