船说 CMS 支持 PHP8 吗

liulian
liulian 正式会员超兽战士
发布于 2026-10-07 04:51 ·0 浏览 ·0 回复

看完这篇,你能自己判断手上的船说 CMS 到底能不能跑在 PHP 8 上,跑不了的话知道该降级还是该改代码。

很多人升级服务器环境时顺手把 PHP 从 7.4 调到 8.0,结果网站直接白屏或者报一堆 Fatal error。船说 CMS 的情况是:**官方没有明确的 PHP 8 兼容声明,绝大多数现成版本是按 PHP 5.6~7.x 写的,直接换到 PHP 8 大概率跑不起来。** 但这不能靠猜,下面按步骤实测。

第一步:确认你的船说 CMS 版本和当前 PHP 版本

先拿到两个数字,不然没法判断。

  • 看 PHP 版本:后台一般有「系统」→「系统信息」页面,里面会列出 PHP 版本、MySQL 版本。如果没有,就在网站根目录建一个 phpinfo.php,内容写 <?php phpinfo(); ?>,浏览器访问 你的域名/phpinfo.php,看完记得删掉。
  • 看 CMS 版本:根目录下找 version.php、config.php 或者 composer.json,文件里通常有版本号。后台页脚一般也会写。

注意:phpinfo.php 会把服务器路径、扩展、环境变量全暴露出来,测完必须删除,别留在线上。

第二步:查官方的兼容性说明

打开船说 CMS 的官方发布页或更新日志,找两个关键词:PHP 8、兼容。重点看最近一次更新的时间和更新说明里提到的适配版本。

如果最新版更新日志里压根没提 PHP 8,那就默认它没适配。别指望"没说不支持就是支持",老 CMS 的代码里大量用了 PHP 8 已经删掉的函数。

第三步:用工具扫一遍代码,看有多少坑

这一步不用把网站跑起来,直接静态扫描。装 PHPCompatibility:

composer global require "squizlabs/php_codesniffer=*"
composer global require phpcompatibility/php-compatibility
phpcs --config-set installed_paths ~/.composer/vendor/phpcompatibility/php-compatibility

然后扫描网站目录:

phpcs -p /www/wwwroot/你的站点 --standard=PHPCompatibility --runtime-set testVersion 8.0-8.2 --extensions=php

输出里会逐条列出哪一行用了 PHP 8 不支持的东西。常见的几类:

  • each():PHP 8.0 已彻底移除
  • $str{0} 这种花括号取字符:PHP 8.0 移除,必须改成 $str[0]
  • 同名方法当构造函数:不再生效
  • 传 null 给内部函数的非空参数:已废弃并大量报警

再手动补两刀快速定位:

grep -rn "each(" --include="*.php" .
grep -rnE '\$[a-zA-Z_][a-zA-Z0-9_]*\{[0-9]+\}' --include="*.php" .

第四步:搭测试环境实跑一遍

扫描只能发现语法层面的问题,运行时错误得实际跑才知道。别直接在线上切 PHP 版本。

如果你用宝塔面板:先复制一份站点和数据库,新建一个测试站点,然后「网站」→ 选中测试站点 →「设置」→「PHP版本」→ 下拉选 PHP 8.0 → 保存。再逐个点开前台首页、栏目页、内容页、后台登录、后台发布文章。

如果你用 phpStudy:首页 →「网站」→ 对应站点「管理」→「PHP版本切换」→ 选 8.0。

重点测这几处,它们最容易炸:后台登录、文章发布、附件上传、伪静态规则。

第五步:根据结果决定怎么处理

情况 A:测试站一切正常。 说明你这个版本已经适配过了,可以放心切换线上环境。切换前记得完整备份数据库和网站目录。

情况 B:白屏或报错。 两个选择:

  1. 最省事:切回 PHP 7.4。 在宝塔的「网站 → 设置 → PHP版本」里改回 PHP 7.4,保存即恢复。7.4 官方安全支持已结束,但作为过渡完全够用。
  2. 想上 PHP 8:按扫描结果改代码。 把 each() 循环改写成 foreach,把 $str{0} 改成 $str[0]。改动量大、又不懂 PHP 的话,建议直接找 CMS 官方或开发者做适配,自己硬改容易把功能改坏。

注意:数据库备份和文件备份要分别做。只备份文件不备份数据库,出问题时数据找不回来。

小结

  • 船说 CMS 官方对 PHP 8 没有明确兼容承诺,现成版本默认按 5.6~7.x 开发,直接切 PHP 8 大概率报错。
  • 判断顺序:确认版本 → 查官方更新日志 → 用 PHPCompatibility 静态扫描 → 测试站实跑。
  • 最容易出问题的是 each() 和 $str{0} 这两类写法。
  • 永远先在测试站验证,别拿线上站当试验田。
  • 跑不通又不改代码,就把 PHP 版本切回 7.4,这是代价最小的方案。
版权声明:本文来自 GJ论坛《船说 CMS 支持 PHP8 吗》
原文链接:https://www.gj0.com/thread-78.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~