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優先級高)。