PHP 5.6 + MySQL 5.7 → PHP 8.3 + MySQL 8.0 升级步骤

当前状态(已完成)

  • 本地环境:PHP 8.3 + MySQL 8.0 + Nginx
  • 框架/代码已做 PHP 8.3 兼容改造(如 version.inc.phpbootstrap.inc.php、db 类等)
  • info.php 正常 → PHP 环境与扩展 OK
  • test_db.php 正常 → MySQL 8.0 连接 OK
  • data/config.php 已配置(库名:demo_xiaoshan)

下一步(按顺序执行)

1. 确认 MySQL 8.0 数据与字符集

  • 若从旧库迁移:在 MySQL 5.7 上导出数据,在 MySQL 8.0 上导入;注意用户认证方式(MySQL 8.0 默认 caching_sha2_password,若连不上可改为 mysql_native_password)。
  • 若用现有 demo 库:确认库 demo_xiaoshan 已建好,且表结构已导入(如 demo_xiaoshanxin_table.sql / demo_xiaoshanxin_data.sql)。
  • 字符集:建议库和表使用 utf8mb4,与 MySQL 8.0 默认一致;config 中已可选 utf8mb4(见下方配置说明)。

2. 配置与依赖

  • Redis:当前 config.phpcacheredis。若本地未装 Redis,请改为 mysql,否则会报错。
  • 开发模式(可选):需在后台“执行 SQL”或做部分调试时,将 $config['setting']['development'] 设为 1

3. 访问后台做一次完整验证

  1. 浏览器访问:http://localhost/web/index.php(或你的 Nginx 配置的站点根路径对应地址)。
  2. 使用创始人账号登录(founder 在 config 中为 1,需数据库中已有对应用户)。
  3. 登录后检查:
    • 首页 / 工作台是否正常;
    • 云服务 → 升级(若有入口)走一遍;
    • 系统 → 数据库 看是否有表结构差异或提示。

4. 功能回归测试

  • 关键业务:公众号/小程序配置、用户登录、订单、支付等按你们实际业务点几条。
  • 若有报错:看 PHP 错误日志(开发模式下会直接报错)或 Nginx/PHP-FPM 日志,再针对报错改代码或配置。

5. 上线前(从本机迁到 PHP 8.3 + MySQL 8.0 生产环境)

  • 再次确认生产环境 PHP 8.3、MySQL 8.0、Nginx 与本地一致或兼容。
  • 生产 data/config.php 使用生产库与 Redis(若用)。
  • 备份旧站数据与 DB,再切流量。

配置小贴士(MySQL 8.0)

  • charset:推荐 utf8mb4(在 config.phpdb.master.charsetdb.master.slave.*.charset 可改为 utf8mb4),与 MySQL 8.0 默认一致,避免部分 emoji 或生僻字问题。
  • Redis:本地未装 Redis 时务必把 $config['setting']['cache'] 改为 'mysql'

常见问题

现象 可能原因 处理
后台打开报 500 / 白屏 PHP 报错或 Redis 连不上 开 development=1 看报错;或改用 mysql 缓存
数据库连接失败 认证插件或端口不对 MySQL 8.0 用户改为 mysql_native_password 或检查 host/port
某页报 deprecated / notice 个别代码未兼容 PHP 8.3 根据报错文件与行号改掉废弃写法

完成以上步骤后,项目在 PHP 8.3 + MySQL 8.0 上的升级与验证流程即算走通。


PHP 8.3 错误日志与功能回归检查清单

1. PHP 错误日志建议配置

  • 在 PHP 配置中确保:
    • display_errors = Off(线上推荐关闭,开发可开启但仍应写日志)
    • log_errors = On
    • error_reporting = E_ALL
  • 为站点单独指定 error_log(示例):
; 推荐:指向项目目录下 data/logs(本项目内置的默认日志目录)
error_log = /path/to/hospital_8/data/logs/php-error.log

说明:如果未在 php.ini 中显式指定 error_log,本项目会在 framework/bootstrap.inc.php 中自动将 error_log
设置为相对于项目根目录的 data/logs/php-error.log。后续所有“白屏/接口 500”问题,优先查看该文件,并按时间戳对应到具体请求。

2. 核心功能回归 URL 清单(PHP 8 回归时使用)

每轮批量修改后,按下面顺序点一遍页面,并在操作后查看 PHP 错误日志中是否有新的 Fatal / TypeError / Warning:

  • 系统与登录
    • 后台入口:/web/index.php(登录页 / 仪表盘)
    • 用户登录 / 退出:web/source/user/login.ctrl.php 相关页面
  • XSX_V3 模块核心
    • 仪表盘 / 概况:?c=site&a=entry&m=xsx_v3&do=dashboard&op=gk
    • 患者列表:?c=site&a=entry&m=xsx_v3&do=copysite&op=userlist&act=profile.userlist
    • 患者档案详情:?c=site&a=entry&op=adduser&do=copysite&m=xsx_v3&act=profile.adduser
    • 挂号/问诊订单列表:addons/xsx_v3/inc/web/order.inc.php 对应的若干列表页
    • 药房 / 购药订单:addons/xsx_v3/inc/web/medicine.inc.php 相关列表与详情
    • 体检 / 检查:addons/xsx_v3/inc/web/physical.inc.phpaddons/xsx_v3/inc/web/jiancha.inc.php
    • 财务统计:addons/xsx_v3/inc/web/financ.inc.php
  • 档案相关扩展功能
    • 档案管理页所有 Tab:profile.adduser(基本信息、积分信息、问诊记录、体征记录、订单记录等)
    • 病历 PDF 导出:?c=site&a=entry&op=binglipdf&do=copysite&m=xsx_v3&act=profile.binglipdf&orderNo=...
  • 系统功能
    • 系统设置:/web/index.php?c=system&a=site
    • 数据库管理:/web/index.php?c=system&a=database
    • 日志查看:/web/index.php?c=system&a=logs 及 XSX 模块日志页

建议:每次集中修改一批控制器或模板后,按以上清单快速点一遍,并在 PHP 日志中搜索是否出现新的报错,再根据报错文件与行号回到项目中逐一修正。

作者:周珊  创建时间:2026-05-05 23:38
最后编辑:周珊  更新时间:2026-05-05 23:38