ksweb 中文文档 下载 App

KSWEB 老 CMS 与新 PHP 版本不兼容 切回 PHP 7.4 或 5.6

现象

CMS 安装成功了,但打开首页白屏、或报一堆 Fatal error / Parse error:

Parse error: syntax error, unexpected '[' in /storage/emulated/0/htdocs/wp-content/plugins/old-plugin/functions.php on line 45
Fatal error: Cannot use object of type WP_Error as array in ...

这不是 CMS 坏了,是 PHP 版本太新。PHP 8.0+ 做了太多破坏性变更——原来 E_NOTICE 级别的警告现在直接升成 Fatal error 中断执行,原来能跑的"宽松"写法现在报语法错误。

直接解法:切 PHP 版本

KSWEB PRO 版 PHP 标签页里下拉选:

切完后:

  1. 重启当前 Web 服务器
  2. 清空 CMS 缓存(WordPress 装 WP Super Cache 插件的话要清)
  3. 浏览器强刷(Ctrl+F5)

刷新后白屏应该消失。

为什么 PHP 新版本会破老代码

PHP 8.0+ 的主要破坏性变更:

1. 类型声明更严格

// PHP 7.4 能跑
function add($a, $b) {
    return $a + $b;
}
add("1", "2"); // 隐式转字符串为数字

// PHP 8.1 严格模式下会报错
declare(strict_types=1);
add("1", "2"); // TypeError

2. 原来的 Warning / Notice 升成 Error

3. 语法更严格

4. 扩展默认移除

老 CMS 可能依赖 mysql 扩展(不是 mysqli),MySQL 扩展在 PHP 7.0 起就移除了。KSWEB 内置的 MySQL 支持的是 mysqli 和 pdo_mysql,老 CMS 如果硬依赖 mysql_* 函数就要么切 PHP 5.6,要么手动补扩展。

版本选择对照表

CMS / 框架最低 PHP推荐用极端情况用
WordPress 6.x7.48.27.4(老插件)
WordPress 5.x5.67.47.3
Drupal 108.18.2—
Drupal 97.37.4—
Drupal 75.25.6—
Joomla 5.x8.08.2—
Joomla 4.x7.27.4—
Joomla 3.x5.37.3—
MODX 3.x7.47.4—
MODX 2.x5.67.4—
Yii2 2.17.18.2—
Yii1.x5.15.6—
Laravel 118.28.3—
Laravel 5.x5.67.4—

切版本后 CMS 还要不要重新装

不用。CMS 的配置文件(wp-config.php、configuration.php)存的是数据库连接,和 PHP 版本无关。切 PHP 版本只是运行时环境变了,CMS 源码和数据库都不动。

但一定要清 CMS 缓存——WordPress 的对象缓存、编译好的模板文件可能是老 PHP 版本编译的,新 PHP 跑起来会出奇怪的错误。

Standard 版用户

Standard 版没有 PHP 版本切换器。如果你的 CMS 在 Standard 版默认 PHP 版本上跑不起来:

  1. 先试试 PHP 8.2(大多数 CMS 都适配了)
  2. 实在不行就需要升级 PRO 来切换版本
  3. 或者换个新版本的 CMS(WordPress 升级到最新版,Joomla 升级到 5.x)