云服务器升级PHP需分步操作:先确认CLI与Web服务实际版本,再按系统类型选用PPA或remi源安装指定版本,最后更新Web配置、启用扩展并正确重启服务。

PHP 版本过低不是“换个版本就行”的简单操作,云服务器上升级 PHP 很容易导致网站白屏、500 Internal Server Error、扩展缺失或 Composer 报错,尤其当旧项目依赖 mysql_connect() 或 PHP 5.x 语法时。必须先确认当前环境和升级路径,再分步操作。
查清当前 PHP 版本和运行模式
很多用户直接执行 php -v 就以为搞定了,但云服务器上常存在多版本共存、Web 服务(如 Apache/Nginx)实际调用的却是另一个 PHP SAPI(如 php-fpm),导致 CLI 版本和网页运行版本不一致。
- 在终端运行:
php -v(查看 CLI 版本) - 新建一个
info.php文件,内容为,通过浏览器访问,重点看Loaded Configuration File和Server API(比如是FPM/FastCGI还是apache2handler) - 若用
php-fpm,运行systemctl status php-fpm或ps aux | grep php-fpm看实际加载的配置路径 - 注意:Ubuntu/Debian 默认可能装的是
php7.4,但你用的是php8.1的包源却没启用,apt list --installed | grep php能暴露真实安装状态
根据系统类型选对升级方式
CentOS/RHEL 与 Ubuntu/Debian 的包管理逻辑完全不同,硬套教程会出问题。别用 apt install php 这种模糊命令——它在 Ubuntu 22.04 默认装的是 php8.1,但在 Ubuntu 18.04 可能还是 php7.2;而 CentOS 7 官方源早已停止更新 PHP,必须换源。
-
Ubuntu/Debian:优先用
ondrej/phpPPA 源(稳定且多版本并存支持好)sudo apt install software-properties-commonsudo add-apt-repository ppa:ondrej/phpsudo apt update
然后安装指定版本,例如:sudo apt install php8.2 php8.2-fpm php8.2-mysql php8.2-curl -
CentOS 7/8:禁用默认源,启用
remi(比 EPEL 更新快)sudo yum install epel-releasesudo yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm(CentOS 7)sudo yum-config-manager --enable remi-php82sudo yum install php php-fpm php-mysqlnd php-curl - 切勿用
curl | bash类一键脚本——它们常绕过包管理器,后续无法升级或卸载
切换 PHP 版本后必须检查三件事
装完新 PHP 不等于生效。Apache/Nginx 需要重新指向新版本的模块或 socket,PHP 扩展也要手动启用,否则 500 错误大概率出现。
立即学习“PHP免费学习笔记(深入)”;
-
Web 服务配置是否更新:
– Apache:检查/etc/apache2/mods-enabled/php*.load是否指向新版本,或改SetHandler指令;
– Nginx + php-fpm:确认fastcgi_pass指向正确的 socket,例如unix:/run/php/php8.2-fpm.sock(不是php7.4的) -
关键扩展是否启用:新版 PHP 默认不开启
mysqli、pdo_mysql等,需检查php.ini中是否有extension=mysqli,或确认/etc/php/8.2/fpm/conf.d/下有对应 .ini 文件 -
重启顺序不能错:先
systemctl restart php8.2-fpm(或对应服务名),再systemctl restart apache2或nginx;只重启 Web 服务,PHP 进程没起来,照样 502 Bad Gateway
最常被忽略的是 session 存储路径权限和 OPCache 兼容性:升级到 PHP 8.1+ 后,如果 session.save_path 目录属主不是 www-data 或 nginx,登录态会丢失;OPCache 若未重置(sudo systemctl reload php8.2-fpm 不够,得 sudo phpdismod opcache && sudo phpenmod opcache),旧字节码可能引发解析错误。这些细节不查日志根本看不出原因。











