PHP7.2环境下安装MODX后登录管理面板出现each()函数废弃提示的解决方法
each()函数废弃警告的问题 这个问题我之前碰到好多次了——PHP 7.2正式把each()函数标记为废弃,而老版本的MODX还在代码里使用这个函数,所以登录管理面板时就会弹出那个烦人的Deprecated: The each() function is deprecated提示。下面给你几个实用的解决办法,按优先级排序:
优先升级MODX到兼容版本:这是最彻底的解决方案。MODX从2.6.0版本开始就已经修复了
each()函数的兼容问题,建议直接升级到最新的稳定版(比如2.8.x系列)。升级前一定要记得备份网站的所有文件和数据库,避免意外丢失数据。升级后不仅能解决这个警告,还能获得官方的安全更新和功能优化。手动替换代码中的
each()调用(应急方案):如果暂时没办法升级MODX,可以手动修改核心文件里的each()用法。each()通常和list()配合使用,比如原来的代码:while (list($key, $val) = each($someArray)) { // 业务逻辑 }可以替换成PHP 7.2支持的
foreach写法:foreach ($someArray as $key => $val) { // 业务逻辑 }你需要在MODX核心目录(
core/)里搜索each(,找到所有调用这个函数的地方逐一替换。常见的文件比如core/model/modx/modcachemanager.class.php、core/model/modx/modparser.class.php里都可能有这类代码。替换前务必备份原文件,防止改错导致系统崩溃。临时屏蔽废弃警告(不推荐长期使用):如果只是想临时隐藏警告,可以调整PHP的错误报告级别。你可以在MODX的
config.core.php或者后台入口文件manager/index.php的顶部添加一行代码:error_reporting(E_ALL & ~E_DEPRECATED);或者修改服务器的
php.ini文件,把error_reporting设置为E_ALL & ~E_DEPRECATED。但这个方法只是“掩耳盗铃”,没有解决根本问题,不建议长期使用,因为它会隐藏其他可能的重要错误提示。
内容的提问来源于stack exchange,提问作者Alex F.

