Ubuntu 18.04 服务器:如何安全升级 PHP
要在 Ubuntu 18.04 服务器上将 PHP 更改为最新版本,首先检查操作系统和应用程序的支持与兼容性,然后在受支持的 Ubuntu 服务器上测试新的 PHP 再进行切换。像以前一样,仅添加外部仓库并执行完整的包升级,并不能保证得到想要的 PHP 版本,也不能保证 web 服务器会使用它。
在 Ubuntu 18.04 上首先要检查的要点
Ubuntu 18.04 LTS 的常规安全维护已于 2023 年 5 月结束。Ubuntu Pro 的扩展安全维护(ESM)为适用的软件包提供额外的安全补丁,但这并不意味着支持所有外部仓库或所有 PHP 版本。检查 Ubuntu 18.04 的支持期限以及您当前订阅和软件包的覆盖范围。
你应该区分 PHP 项目支持的版本和发行版提供安全补丁的包。即使 Ubuntu 包的版本号保持不变,也可能应用了安全修复,而外部包则不会自动获得 Ubuntu Pro 的保证。请检查官方支持的 PHP 版本 以及软件包提供商的政策。
从长远来看,建议在新服务器上安装受支持的 Ubuntu LTS 并迁移服务。在原地升级现有服务器时,不能跳过 LTS 版本,因此需要先从 18.04 升级到 20.04,然后按顺序进行。有关详细步骤,请参阅 《Ubuntu 服务器升级指南》。
检查当前的 PHP 和 Web 服务器配置
在更改生产服务器之前,记录命令行界面(CLI)版本、已加载的扩展和已安装的软件包。以下命令可用于获取信息,但如果未安装 PHP,有些命令可能会失败。
lsb_release -a
php -v
php --ini
php -m
dpkg -l 'php*' | grep '^ii'
apt-cache policy php
php -v 是 CLI 版本。用于 Web 请求的 Apache 模块或 PHP-FPM(FastCGI 进程管理器)的版本和设置可能不同。在 Apache 中,使用 apache2ctl -M 检查活动模块;在 Nginx 或 Apache 站点配置中,检查 FastCGI 指向的套接字或地址。是否使用 PHP-FPM 应结合服务列表和 Web 服务器设置进行检查。
systemctl list-units --type=service --all 'php*-fpm.service'
sudo apache2ctl -M
对于不使用 Apache 的服务器,无需运行第二条命令。请备份配置文件、站点文件、数据库和上传的文件,并查看恢复程序。请妥善保管包含密码或个人信息的设置。
选择新版本并准备测试环境
- 检查应用程序、插件和依赖项支持哪些 PHP 版本。PHP 的主要版本更改可能导致不兼容行为,因此请查看从当前版本到目标版本的 PHP 迁移指南。
- 选择一个受支持的 Ubuntu 和 PHP 组合,并准备一个与生产环境分离的测试服务器。使用可恢复的备份,并注意保护真实用户数据。
- 记录所需的 PHP 扩展,并找到适合新环境的软件包。数据库驱动、图像处理、XML、ZIP 等的需求根据应用不同而不同。
- 在测试服务器上,检查登录、数据库连接、文件上传、计划任务和主要界面,并查看错误日志。如果有问题,修改应用程序和扩展,然后再次测试。
示例:在 Ubuntu 24.04 测试服务器上安装 PHP 8.3
下面是一个在新的 Ubuntu 24.04 LTS 测试服务器,而不是 Ubuntu 18.04上安装 PHP 8.3 CLI 和 PHP-FPM 的示例。PHP 8.3 并不总是意味着它是最新版本。请检查所选 Ubuntu 版本的支持期限以及 适用于 Ubuntu 24.04 的 PHP 8.3 软件包列表,并仅添加您的应用所需的扩展。
首先,查看软件包候选项和更改计划。如果没有候选项或删除/更改列表与预期不同,请不要安装,并检查仓库和依赖项。
sudo apt update
apt-cache policy php8.3-cli php8.3-fpm
apt-get -s install php8.3-cli php8.3-fpm
如果测试服务器上的结果合适,请安装并检查状态。下面的命令不会配置 Web 服务器自动使用 PHP-FPM。
sudo apt install php8.3-cli php8.3-fpm
php8.3 -v
php8.3 -m
systemctl status php8.3-fpm --no-pager
例如,如果某个应用需要 MySQL 或 MariaDB 连接,请在该环境中单独查看 php8.3-mysql。由于 CLI 和 FPM 的配置文件及扩展可能不同,请检查新 FPM 的设置和服务。安装软件包后,调整 Web 服务器的 FastCGI 设置以匹配测试服务器的 FPM 套接字,并在通过 Web 服务器配置检查后重新加载它。Apache 模块方法是单独配置的,不应与 FPM 混淆。
验证 Web 配置并从问题中恢复
您无法仅使用 CLI 版本检查网站的 PHP 版本。请验证 Web 服务器的活动设置以及 FPM 服务和日志,并在受限的测试环境中,通过应用程序的状态页面或管理工具确认 Web 请求是否使用新的 PHP。不要将包含详细服务器设置的 phpinfo() 页面放置在公开可访问的位置。
在实际切换之前,规划维护窗口、数据同步和恢复点。切换服务后,检查关键功能以及 Web 服务器和 PHP 错误日志。如果出现问题,恢复到之前保存的 Web 服务器连接设置,执行配置检查并重新加载,或者将流量转回切换前的服务器。如果数据库结构发生变化,仅恢复 PHP 版本可能无法恢复功能,因此应同时使用备份和数据恢复计划。
对外部仓库和完整升级要小心
本文之前的方法添加了 ppa:ondrej/php 并运行了 apt-get upgrade。是否外部仓库目前支持 Ubuntu 18.04 及所需的 PHP 版本由提供者决定,仅仅添加仓库并不能保证安全维护。apt-get upgrade 不仅影响 PHP,还影响可以升级的其他软件包。
在生产服务器上添加或删除仓库之前,请审查软件包来源、可能变化的依赖关系以及恢复方法。您还应单独检查 Web 服务器如何处理 PHP,因为仅激活不同版本的 Apache 模块而保留旧的 PHP 模块可能会导致配置冲突。




