赞片CMSPHP版本不兼容
学完这篇,你能自己判断赞片CMS报的错到底是不是PHP版本引起的,并且能动手把版本调到能跑的状态,或者在没有旧版本PHP的空间里把代码改到兼容。
第一步:先确认报错是不是PHP版本问题
这一步要拿到两个信息:服务器当前跑的是哪个PHP版本,以及报错信息里出现了什么关键字。两个信息凑齐,才能定性。
查PHP版本有三种办法,任选一种:
- 在宝塔面板左侧点「软件商店」→「已安装」,看 PHP 后面显示的版本号,比如 PHP 8.0、PHP 7.4;
- 在网站根目录建一个
info.php,内容写<?php phpinfo(); ?>,浏览器访问你的域名/info.php,第一行就是版本; - 宝塔面板「网站」→点你的站点→「设置」→「PHP版本」标签页,下拉框里选中的那个就是当前生效版本。
报错信息里如果出现下面这些关键字,基本可以判定是版本不兼容,而不是程序本身的bug:
Deprecated: Function create_function() is deprecatedFatal error: Uncaught Error: Call to undefined function each()Call to undefined function mysql_connect()Fatal error: Uncaught Error: Call to undefined function get_magic_quotes_gpc()Warning: preg_replace(): The /e modifier is no longer supported
注意:赞片CMS这类视频站程序大多是2016—2020年间的代码,官方文档写的运行环境通常是 PHP 5.6 到 PHP 7.2。如果你装的是 PHP 8.0 及以上,几乎必然报错,这不是你装错了。
第二步:优先尝试降级PHP,成本最低
这一步的目标是把站点环境退回到程序能跑的范围,也是最省事的做法。
宝塔面板操作路径:
- 「软件商店」→「运行环境」,找到 PHP 7.2 或 PHP 5.6,点「安装」(编译安装大约10—30分钟);
- 安装完成后回到「网站」→ 点站点名 →「设置」;
- 切到「PHP版本」标签,下拉选择刚装的 PHP 7.2;
- 点「保存」,然后「网站」页面点站点右侧的「重载配置」。
如果面板里只有 PHP 8.x,说明主机商锁定了版本,这种情况下不要硬折腾,直接进第三步。
注意:降级前先在「数据库」里把整站数据库导出备份,路径是宝塔「数据库」→ 找到对应库 →「备份」。换PHP版本偶尔会导致表结构或字符集出问题,有备份才敢动。
第三步:不能降级,就按报错逐个改代码
这一步适用于只能用 PHP 7.4/8.x 的空间。原则是:改一处、测一处,不要一次性全改。
常见改法对照:
1. each() 已被 PHP 8 移除
找到报错文件行号,把
while (list($k, $v) = each($arr)) {
改成
foreach ($arr as $k => $v) {
2. create_function() 已移除
usort($a, create_function('$x,$y', 'return $x-$y;'));
改成
usort($a, function($x, $y) { return $x - $y; });
3. mysql_* 系列函数已移除
这类改动量大,不建议手改。如果赞片CMS本身带 PDO 或 mysqli 的配置文件,优先在 data/config.php 或 include/config.inc.php 里把数据库连接方式切过去;切不了的话,降到 PHP 5.6 是唯一现实选择。
4. preg_replace 的 /e 修饰符已移除
preg_replace('/abc/e', ...)
改成 preg_replace_callback('/abc/', function($m){ ... }, $str)。
5. 字符串花括号取值$str{0} 改成 $str[0]。可以用编辑器全局替换,注意只替换变量后跟花括号加数字的模式。
注意:改之前把要动的文件复制一份,命名成
xxx.php.bak。改崩了直接改回来,比对着报错找半天快得多。
第四步:补齐扩展和伪静态
版本对了还跑不起来,八成是扩展缺了。
在宝塔「软件商店」→ 点当前PHP版本的「设置」→「安装扩展」,确认这几个是开启状态:fileinfo、curl、gd、mbstring、openssl。赞片CMS做视频封面和远程采集时会用到 curl 和 gd,缺了会出现「上传失败」「采集无结果」。
伪静态规则在「网站」→ 站点 →「设置」→「伪静态」,选 thinkphp 或粘贴官方提供的规则,保存后重载。
第五步:清缓存验证
最后一步是清掉旧版本PHP跑出来的缓存文件,否则会出现「改了还是报错」的假象。
进宝塔「文件」,定位到站点根目录,删除 runtime/ 目录下的全部内容(目录本身保留),再删 data/cache/ 里的缓存文件。然后浏览器访问首页和后台 /admin.php,两项都能正常打开就算成了。
注意:
runtime目录删除后第一次访问会变慢,那是程序在重新生成缓存,正常现象。
小结
- 先拿PHP版本号 + 报错关键字,确认是不是版本问题,别上来就改代码。
- 首选降级到 PHP 7.2 或 5.6,宝塔路径是「软件商店」装版本 →「网站」→「设置」→「PHP版本」切换。
- 降不了级就按报错改:
each()、create_function()、mysql_*、preg_replace /e、$str{0}这五类是最常见的。 - 扩展要开
fileinfo、curl、gd、mbstring,伪静态规则别忘配。 - 动手前备份数据库和源文件,改完删
runtime缓存再测。
原文链接:https://www.gj0.com/thread-665.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。