能否无需ppa:ondrej/php在Ubuntu20.04 Apache中安装PHP8.1并与7.4共存?
在Ubuntu 20.04 Apache服务器上无需ppa:ondrej/php同时运行PHP7.4与PHP8.1
可以实现,以下是两种安全可控的方案,均无需依赖第三方PPA:
方案1:手动编译PHP8.1(推荐,完全可控)
Ubuntu 20.04官方源仅提供PHP7.4,手动编译PHP8.1能避免第三方依赖,适合敏感生产环境:
- 安装编译依赖(均为官方源安全包):
sudo apt update sudo apt install build-essential libxml2-dev libssl-dev libcurl4-openssl-dev libjpeg-dev libpng-dev libfreetype6-dev libzip-dev libonig-dev
- 下载并解压PHP8.1源码:
选择PHP官方稳定版本(如8.1.26),下载到服务器:
wget https://www.php.net/distributions/php-8.1.26.tar.gz tar -xzf php-8.1.26.tar.gz cd php-8.1.26
- 配置编译参数(针对Apache FPM,多版本共存更灵活):
./configure --prefix=/usr/local/php8.1 \ --enable-fpm \ --with-fpm-user=www-data \ --with-fpm-group=www-data \ --with-openssl \ --with-curl \ --with-jpeg \ --with-png \ --with-freetype \ --with-zip \ --with-mysqli \ --with-pdo-mysql \ --enable-mbstring \ --enable-xml
--prefix指定独立安装路径,避免与系统PHP7.4冲突。
- 编译并安装:
make -j$(nproc) sudo make install
- 配置PHP8.1 FPM服务:
复制默认配置文件并设置开机自启:
sudo cp /usr/local/php8.1/etc/php-fpm.conf.default /usr/local/php8.1/etc/php-fpm.conf sudo cp /usr/local/php8.1/etc/php-fpm.d/www.conf.default /usr/local/php8.1/etc/php-fpm.d/www.conf sudo cp sapi/fpm/php-fpm.service /etc/systemd/system/php8.1-fpm.service sudo systemctl daemon-reload sudo systemctl start php8.1-fpm sudo systemctl enable php8.1-fpm
- Apache多版本PHP配置:
通过虚拟主机配置为不同站点指定PHP版本:
- 需使用PHP8.1的站点,在虚拟主机配置中添加:
<FilesMatch \.php$> SetHandler "proxy:unix:/run/php/php8.1-fpm.sock|fcgi://localhost/" </FilesMatch>
- 保留PHP7.4的站点,使用默认配置:
<FilesMatch \.php$> SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/" </FilesMatch>
配置完成后重启Apache生效:sudo systemctl restart apache2
方案2:使用Ubuntu官方Backports(仅当可用时)
检查Ubuntu 20.04的backports源是否提供PHP8.1:
sudo apt update sudo apt-cache policy php8.1
若backports中有PHP8.1,直接安装(官方源包安全有保障):
sudo apt install -t focal-backports php8.1 php8.1-fpm php8.1-cli php8.1-common php8.1-mysql php8.1-curl php8.1-gd php8.1-mbstring php8.1-xml
后续Apache多版本配置同方案1。
关键注意事项
- 手动编译完成后,可删除源码包及编译依赖(保留运行时依赖)以减少服务器冗余。
- 生产环境优先使用FPM而非mod_php,性能更优且多版本管理更灵活。
- 验证版本:创建
info.php文件(内容<?php phpinfo(); ?>),访问后确认PHP版本正确。 - 定期更新:手动编译版本需重新下载新版本源码编译;backports版本通过
sudo apt update && sudo apt upgrade更新。
内容的提问来源于stack exchange,提问作者Fabri
相关产品推荐
相关产品推荐

