PHP 8.0 升级非覆盖安装,需新增版本后手动切换绑定;旧版保留,配置与扩展不自动继承,须逐一验证兼容性、安装扩展、对接Web服务并排查常见报错。

PHP 7.4 升级到 PHP 8.0 不是覆盖安装,而是新增版本后切换绑定。旧版保留、新版独立运行,配置和扩展不自动继承,必须手动处理。
确认环境与兼容性
升级前先验证项目是否能跑通 PHP 8.0:
- 检查核心扩展是否支持:Redis 需 ≥5.3.0,GD ≥2.3.0,curl、PDO、mbstring 等基础扩展需在 PHP 8.0 下重新编译或启用
- 运行 composer check-platform-reqs 查看第三方包(如 Laravel、ThinkPHP)是否兼容;TP5.x、帝国CMS 7.5 等老系统大概率需改代码或放弃升级
- 用 phpstan 或 psalm 扫描代码,提前发现
each()、create_function()、assert('string')等 PHP 8.0 已移除的用法
安装 PHP 8.0(非覆盖)
根据系统选择方式:
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
- 宝塔面板:进「软件商店 → PHP → 安装 PHP 8.0」→ 进入安装页面后务必勾选 pdo_mysql、fileinfo、opcache、redis、mbstring、curl、openssl;安装完成后不要删 7.4,先切站点测试
- Ubuntu/Debian:添加 ondrej/php8.0 仓库,执行 sudo apt install php8.0 php8.0-fpm php8.0-mysql php8.0-curl …(按需补全扩展)
- CentOS/RHEL:启用 remi-8.0 源,运行 yum install php80 php80-php-fpm php80-php-mysqlnd …
切换并验证服务
安装完只是第一步,关键在正确对接 Web 服务:
立即学习“PHP免费学习笔记(深入)”;
-
Apache:确保
a2enmod php8.0启用,禁用php7.4;检查/etc/apache2/mods-enabled/下软链指向正确模块 -
Nginx + PHP-FPM:修改站点配置中
fastcgi_pass,指向unix:/run/php/php8.0-fpm.sock(路径以systemctl status php8.0-fpm输出为准) - 重启对应服务:systemctl restart apache2 或 systemctl restart nginx php8.0-fpm
- 放一个
info.php(内容为<?php phpinfo(); ?>),访问确认显示的是 PHP 8.0 且扩展加载完整
处理常见报错
切换后白屏或 500,优先查这三处:
-
.user.ini 文件可能锁定了旧的
upload_max_filesize或memory_limit,它会覆盖 php.ini,需手动编辑或删除 -
错误日志:用
tail -f /www/wwwlogs/your-site.error.log(宝塔)或/var/log/nginx/error.log查具体报错;常见如Undefined array key(PHP 8.0 严格警告)、mysql_connect() is deprecated(说明还在用废弃函数) - cURL 异常:即使 php -m 显示 curl,网页里仍可能没加载——进宝塔 PHP 设置里重装一次 curl 扩展,并确认 CLI 和 FPM 加载的是同一份 php.ini


















