Debian管理PHP多个版本的常用方法
这是Debian原生支持的方式,适合需要简单版本切换的场景。
software-properties-common工具(用于添加第三方存储库):sudo apt update && sudo apt upgrade -y
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
apt install命令安装所需版本(如PHP 7.4、8.0、8.2),同时可安装对应扩展(如cli、fpm、mysql等):sudo apt install php7.4 php7.4-cli php7.4-fpm php7.4-mysql
sudo apt install php8.0 php8.0-cli php8.0-fpm php8.0-mysql
sudo apt install php8.2 php8.2-cli php8.2-fpm php8.2-mysql
update-alternatives工具管理默认PHP CLI版本,系统会列出所有已安装的PHP版本,按提示选择:sudo update-alternatives --install /usr/bin/php php /usr/bin/php7.4 74
sudo update-alternatives --install /usr/bin/php php /usr/bin/php8.0 80
sudo update-alternatives --install /usr/bin/php php /usr/bin/php8.2 82
sudo update-alternatives --config php
php -v命令确认当前默认PHP版本,或通过ls /usr/bin/php*查看所有已安装的PHP二进制文件。适合需要频繁切换、编译安装或自定义PHP版本的场景,提供更灵活的管理功能。
phpbrew(推荐):
curl -L -O https://github.com/phpbrew/phpbrew/releases/latest/download/phpbrew.phar
chmod +x phpbrew.phar
sudo mv phpbrew.phar /usr/local/bin/phpbrew
~/.phpbrew/bashrc),并添加到shell配置文件(如~/.bashrc):phpbrew init
echo '[[ -e ~/.phpbrew/bashrc ]] && source ~/.phpbrew/bashrc' >> ~/.bashrc
source ~/.bashrc
+default表示设为默认版本:phpbrew install 7.4 +default
phpbrew install 8.0
switch命令切换全局PHP版本,或use命令临时切换当前终端会话的版本:phpbrew switch php-7.4 # 切换为7.4
phpbrew use php-8.0 # 临时切换为8.0(仅当前终端有效)
list命令查看所有已安装的PHP版本:phpbrew list
phpenv:
安装与phpbrew类似,通过phpenv install命令安装PHP版本,使用phpenv global或phpenv local(针对项目)切换版本,适合需要与版本控制系统集成的场景。
适合需要隔离环境、避免系统污染或快速部署的场景,每个容器运行独立PHP版本。
apt安装Docker引擎:sudo apt update && sudo apt install docker.io -y
sudo systemctl enable --now docker
docker pull php:7.4-fpm
docker pull php:8.0-fpm
-v参数挂载项目目录:docker run -d --name php74 -p 9000:9000 php:7.4-fpm
docker run -d --name php80 -p 9001:9000 php:8.0-fpm
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock改为fastcgi_pass 127.0.0.1:9000)。无论使用哪种方式安装多版本PHP,都需要配置Web服务器以正确解析PHP请求。
mods-enabled目录下的phpX.load文件(如php7.4.load),然后重启Apache:sudo a2dismod php7.2 # 禁用旧版
sudo a2enmod php8.0 # 启用新版
sudo systemctl restart apache2
fastcgi_pass指令,指向对应PHP版本的FPM socket或端口(如fastcgi_pass unix:/var/run/php/php8.0-fpm.sock),然后重启Nginx:sudo systemctl restart nginx
php7.4-mysql、php8.0-gd),避免扩展缺失导致应用无法运行。update-alternatives时,优先级数字越大越优先(如82比74优先级高)。