船说 CMS 支持 PHP7.4 吗
这篇教程教你用 4 步判断自己手上的船说 CMS 到底能不能跑在 PHP 7.4 上,遇到报错时能分清「能救」和「别硬上」两种情况,并给出对应的处理办法。
第一步:先确认你手上是哪个版本的船说 CMS
这一步的目标是拿到准确版本号,因为「船说 CMS 支不支持 PHP 7.4」这个问题,答案完全取决于版本——同名的不同版本可能一个能跑、一个直接白屏。
三个查法,任选一个:
- 登录后台,看页面底部版权行或「系统」→「系统信息」页面,通常写着类似
v2.x的版本号和内核标识。 - 直接翻文件:进网站根目录,找
data/config/version.php、config/version.php或app/version.php这类文件,打开看版本常量。 - 命令行搜(Linux 服务器):
grep -rn "version" /www/wwwroot/你的站点/data/config/ 2>/dev/null | head
拿到版本号后记下来。判断原则很简单:**2018 年之前发布的主版本,基本都是 PHP 5.3–5.6 时代写的,跑 PHP 7.4 大概率有致命错误;2019 年之后、官方明确写过「支持 PHP 7.x」的版本,才有戏。**
注意:不要只看官网宣传页写的「支持 PHP7」。那股宣传可能针对的是最新版,而你手上的包可能是几年前的旧包。以实际文件里的版本号为准。
第二步:搭一个 PHP 7.4 的测试站跑一遍冒烟测试
这一步的目的是用最小成本把问题暴露出来,而不是直接在正式站上换 PHP 版本。
在宝塔面板(或你习惯的环境)里新建一个站点,PHP 版本选 7.4(7.4 最后一个版本是 7.4.33),把船说 CMS 装上去。然后按顺序点这几下:
- 打开首页,看是否正常渲染。
- 打开
/admin或/admin.php后台登录页,用管理员账号登录。 - 进「内容」→「文章管理」→「发布文章」,保存一篇。
- 进「附件」或「媒体库」,上传一张 jpg。
- 打开前台栏目页,确认列表能出来。
同时把错误显示打开,否则你只会看到白屏,不知道错在哪。编辑 PHP 7.4 的 php.ini:
display_errors = On
error_reporting = E_ALL
log_errors = On
error_log = /www/wwwlogs/php_error.log
改完重启 PHP-FPM(宝塔:软件商店 → PHP 7.4 → 设置 → 服务 → 重启)。
注意:改完记得测完就关掉
display_errors,否则线上会把文件路径暴露给访客。
第三步:按报错类型判断「能不能救」
这一步决定你后面是修代码还是换方案。把第二步里出现的错误按下面三类分:
A 类:Deprecated / Notice / Warning(能救)
典型长这样:
Deprecated: Function create_function() is deprecatedDeprecated: The each() function is deprecatedDeprecated: Array and string offset access syntax with curly braces is deprecatedDeprecated: Function get_magic_quotes_gpc() is deprecated
这些在 PHP 7.4 里只是「提示」,程序照样跑,只是日志被刷爆。能救。
B 类:Fatal error / Parse error(要看工作量)
Fatal error: Call to undefined function mysql_connect()Fatal error: Call to undefined function ereg()Parse error: syntax error, unexpected '}'
这些是真的跑不起来。mysql_* 系列函数在 PHP 7.0 就被移除了,全部要改成 mysqli 或 PDO,这是最费工的一类。
C 类:模板/插件报错
如果只有某个栏目页炸,首页和后台正常,那多半是模板标签或某个插件写的 PHP 不兼容,单独改那一个文件就行。
第四步:真要上 7.4,按这个顺序改
这一步给你一套可执行的最小改动清单。动手前先完整备份网站目录和数据库,别问为什么。
- 全局替换
create_function:改成匿名函数。原来是create_function('$a', 'return $a+1;'),改成function($a){ return $a+1; }。 each()循环改foreach:while(list($k,$v) = each($arr))改成foreach($arr as $k => $v)。ereg/eregi改preg_match:注意正则要补上/定界符。mysql_*改mysqli_*:这一步工作量最大,如果涉及几十个文件,收益不如直接换系统。- 临时压掉弃用警告(只作过渡,别长期这么干):
error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE
- 用工具扫一遍兼容性,比人工翻文件快得多:
composer global require phpcompatibility/php-compatibility
phpcs --standard=PHPCompatibility --runtime-set testVersion 7.4- /www/wwwroot/你的站点/
注意:PHP 7.4 本身已于 2022 年 11 月 28 日停止安全支持。如果你是为了「用新一点的 PHP」才升到 7.4,其实没必要——新站直接上 PHP 8.1 或 8.2。升 7.4 的唯一合理理由是「你的老代码能过 7.4 但过不了 8.x」。
小结
- 船说 CMS 能不能跑 PHP 7.4,取决于你手上那个版本,不存在一句话的统一答案,先查版本号再下结论。
- 测试要在独立环境做,打开
display_errors才看得见真实错误。 - 只有
Deprecated/Notice,说明能跑,把错误级别调低即可;出现Fatal error里的mysql_*、ereg、Parse error,才是真不兼容。 - 改代码的顺序:
create_function→each→ereg→mysql_*,工作量递增,最后一步往往不值得做。 - 无论结论如何,PHP 7.4 已停更,新项目请直接选 PHP 8.1/8.2。
原文链接:https://www.gj0.com/thread-844.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。