Ubuntu 18.04标准支持到期后无法安装PHP8+的解决方案求助
在Ubuntu 18.04上安装PHP8+的可行方案
针对Ubuntu 18.04已停止官方支持、Ondrej PPA不再提供PHP包的情况,提供三个可行方案:
方案1:使用第三方维护的EOL Ubuntu PHP源
有第三方源专门维护EOL版本Ubuntu的PHP包,步骤如下:
- 移除已添加的Ondrej PPA(如果之前加过):
sudo add-apt-repository --remove ppa:ondrej/php sudo apt update - 添加第三方源:
sudo apt install software-properties-common sudo add-apt-repository ppa:jczaplicki/xenial-backports sudo apt update - 安装PHP8.0及所需扩展(该源也支持8.1/8.2,替换版本号即可):
sudo apt install php8.0 -y sudo apt install php8.0-common php8.0-mysql php8.0-xml php8.0-xmlrpc php8.0-curl php8.0-gd php8.0-imagick php8.0-cli php8.0-dev php8.0-imap php8.0-mbstring php8.0-opcache php8.0-soap php8.0-zip php8.0-intl -y - 切换Apache的PHP模块并重启服务:
sudo a2dismod php7.2 sudo a2enmod php8.0 sudo systemctl restart apache2
方案2:从源码编译PHP8+
如果第三方源失效,可手动编译PHP:
- 先安装编译依赖:
sudo apt install build-essential libxml2-dev libssl-dev libcurl4-openssl-dev libjpeg-dev libpng-dev libonig-dev libzip-dev libmysqlclient-dev libicu-dev - 下载PHP源码(以8.0.30为例,可替换为8.1/8.2的最新版本):
wget https://www.php.net/distributions/php-8.0.30.tar.gz tar -xzf php-8.0.30.tar.gz cd php-8.0.30 - 配置编译参数(包含常用扩展,可按需调整):
./configure --prefix=/usr/local/php8.0 \ --with-apxs2=/usr/bin/apxs \ --with-mysqli \ --with-pdo-mysql \ --with-openssl \ --with-curl \ --with-gd \ --with-jpeg \ --with-png \ --with-mbstring \ --with-intl \ --with-zip \ --enable-opcache \ --enable-soap \ --enable-imap - 编译并安装:
make -j$(nproc) sudo make install - 切换Apache模块并重启:
sudo a2dismod php7.2 # 检查/etc/apache2/mods-available/php8.0.load文件,确保路径指向/usr/local/php8.0/libphp8.0.so sudo systemctl restart apache2
方案3:使用Docker运行PHP8+(推荐长期使用)
用容器隔离运行环境,避免EOL系统的依赖问题,步骤如下:
- 安装Docker:
sudo apt update sudo apt install docker.io sudo systemctl start docker sudo systemctl enable docker - 拉取PHP8.0 Apache镜像:
docker pull php:8.0-apache - 启动容器并挂载本地项目目录(替换
/path/to/your/project为实际项目路径):docker run -d -p 80:80 -v /path/to/your/project:/var/www/html --name php8-apache php:8.0-apache - 如需安装额外扩展,进入容器执行命令:
docker exec -it php8-apache bash # 示例安装扩展: docker-php-ext-install mysqli curl gd mbstring intl zip soap
内容的提问来源于stack exchange,提问作者Dan Wist
相关产品推荐
相关产品推荐

