




PHP版本升级需重装而非仅重启,CLI与Web环境可能使用不同版本,须分别验证;Ubuntu推荐用ondrej PPA安装多版本并正确切换FPM/Apache模块或Nginx fastcgi_pass配置。
PHP 版本过低通常不是靠“重启服务”就能升级的,升级 PHP 本身需要重新安装或更新二进制,而重启只是让新版本生效的最后一步——但前提是 PHP 已被正确替换或切换。直接重启 php-fpm 或 apache2 不会改变 PHP 主版本号。
很多用户看到 php -v 显示新版,但网页里 phpinfo() 仍是旧版,说明 CLI 和 Web SAPI(如 FPM 或 Apache 模块)用的是不同安装路径。
php -v
info.php,内容为 ,通过浏览器访问php -i | grep "Server API"(常见值是 fpm-fcgi 或 apache2handler)ps aux | grep php,重点关注 php-fpm 的二进制位置(如 /usr/bin/php-fpm8.2)或 Apache 加载的模块路径(如 /usr/lib/apache2/modules/libphp8.1.so)官方源 PHP 版本老旧,ondrej/php 是最稳妥的第三方源,支持多版本共存和干净切换。
sudo apt install -y software-properties-common && sudo add-apt-repository ppa:ondrej/php && sudo apt update
sudo apt install php8.2 php8.2-fpm php8.2-mysql php8.2-curl(按需加扩展)sudo systemctl disable php8.1-fpm(假设旧版是 8.1)sudo systemctl enable php8.2-fpm && sudo systemctl start php8.2-fpm
sudo a2dismod php8.1 && sudo a2enmod php8.2 && sudo systemctl restart apache2
Nginx 不直接调用 PHP,而是通过 fastcgi_pass 转发给 php-fpm。升级 PHP 后若没改这一项,Nginx 仍连着旧版 FPM socket。
fastcgi_pass 指向:fastcgi_pass unix:/run/php/php8.1-fpm.sock → 应改为 php8.2-fpm.sock
ls /run/php/ | grep fpm
sudo nginx -t && sudo systemctl reload nginx(不是 restart)php-fpm 自身配置文件里的 listen 路径是否匹配(默认一般一致)顺序错会导致服务中断或版本不生效。关键是先确保新 PHP 进程已就绪,再通知 Web 服务器连接它。
php-fpm:sudo systemctl start php8.2-fpm(验证 systemctl status php8.2-fpm 是 active)sudo systemctl reload nginx 或 sudo systemctl restart apache2
php -v,必须用浏览器打开 info.php 确认 PHP Version 和 Loaded Configuration File 都指向新版mcrypt 已移除),报错会出现在 php-fpm 日志(/var/log/php8.
2-fpm.log)最常被忽略的是 Web 服务器配置里硬编码的 PHP 版本路径或 socket 名,以及扩展未同步安装导致 php-fpm 启动失败却没被注意到——建议升级后第一件事是查 journalctl -u php8.2-fpm -n 50 --no-pager。