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 标签页里下拉选:
- WordPress 6.x + 极旧插件 → PHP 7.4.33
- Drupal 7 → PHP 5.6.40
- Joomla 3.x → PHP 7.3.33
- 新框架 / 新项目 → PHP 8.2.29 或 8.3.27
切完后:
- 重启当前 Web 服务器
- 清空 CMS 缓存(WordPress 装 WP Super Cache 插件的话要清)
- 浏览器强刷(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
mysqli_fetch_array()对空结果集返回 false,PHP 8.0 后变成 TypeError- 对 null 调用数组操作(
$nullArray["key"]),PHP 8.0 前给 null warning,8.0 后给 Fatal error
3. 语法更严格
- 花括号数组语法(
$arr{0})被移除,必须用$arr[0] - 大括号开头的函数体不再允许直接写(
function foo() {}仍然可以,但不能用某些别名写法)
4. 扩展默认移除
老 CMS 可能依赖 mysql 扩展(不是 mysqli),MySQL 扩展在 PHP 7.0 起就移除了。KSWEB 内置的 MySQL 支持的是 mysqli 和 pdo_mysql,老 CMS 如果硬依赖 mysql_* 函数就要么切 PHP 5.6,要么手动补扩展。
版本选择对照表
| CMS / 框架 | 最低 PHP | 推荐用 | 极端情况用 |
|---|---|---|---|
| WordPress 6.x | 7.4 | 8.2 | 7.4(老插件) |
| WordPress 5.x | 5.6 | 7.4 | 7.3 |
| Drupal 10 | 8.1 | 8.2 | — |
| Drupal 9 | 7.3 | 7.4 | — |
| Drupal 7 | 5.2 | 5.6 | — |
| Joomla 5.x | 8.0 | 8.2 | — |
| Joomla 4.x | 7.2 | 7.4 | — |
| Joomla 3.x | 5.3 | 7.3 | — |
| MODX 3.x | 7.4 | 7.4 | — |
| MODX 2.x | 5.6 | 7.4 | — |
| Yii2 2.1 | 7.1 | 8.2 | — |
| Yii1.x | 5.1 | 5.6 | — |
| Laravel 11 | 8.2 | 8.3 | — |
| Laravel 5.x | 5.6 | 7.4 | — |
切版本后 CMS 还要不要重新装
不用。CMS 的配置文件(wp-config.php、configuration.php)存的是数据库连接,和 PHP 版本无关。切 PHP 版本只是运行时环境变了,CMS 源码和数据库都不动。
但一定要清 CMS 缓存——WordPress 的对象缓存、编译好的模板文件可能是老 PHP 版本编译的,新 PHP 跑起来会出奇怪的错误。
Standard 版用户
Standard 版没有 PHP 版本切换器。如果你的 CMS 在 Standard 版默认 PHP 版本上跑不起来:
- 先试试 PHP 8.2(大多数 CMS 都适配了)
- 实在不行就需要升级 PRO 来切换版本
- 或者换个新版本的 CMS(WordPress 升级到最新版,Joomla 升级到 5.x)