报错因PHP升级后each()函数被废弃或移除,需定位替换为foreach;验证实际PHP版本、检查扩展与配置,并仅在必要时用自定义myEach函数模拟原行为。

小皮面板升级 PHP 后出现 The each() function is deprecated 报错,说明项目中用了已被废弃的 each() 函数——它从 PHP 7.2 起被标记为废弃,PHP 8.0 已彻底移除。这不是小皮面板的问题,而是代码与新版 PHP 不兼容。解决核心是:**定位并替换所有 each() 调用,优先改用 foreach;若必须保留指针行为,再考虑自定义函数。**
确认报错来源和 PHP 实际版本
别只看小皮面板显示的版本号,要分层验证:
- 在网站根目录建
test.php,写入,通过浏览器访问,确认页面顶部显示的 PHP 版本(服务端实际运行版本) - 打开 CMD,执行
where php和php -v,确认命令行 PHP 版本(可能和网站不同) - 查看报错信息里的完整路径和行号,比如
in /www/test/app/pay.php on line 343,直接打开对应文件定位问题代码
用 foreach 替换 while(each()) 是最稳妥方案
绝大多数场景下,each() 都出现在这种结构里:
while (list($key, $val) = each($array)) { ... }
只需两步替换即可:
- 把
while (list($key, $val) = each($array))改成foreach ($array as $key => $val) - 删掉原循环体内可能存在的
next($array)或reset($array)(foreach自动管理指针) - 注意检查变量名一致性,比如原代码用的是
$para_temp或$lines,替换时保持名称不变
检查扩展和 php.ini 配置是否匹配新版本
升级 PHP 后,旧版 php.ini 可能未自动启用必需扩展,导致部分功能异常间接引发报错:
- 进小皮面板 → 【PHP 设置】→ 找到你当前站点使用的 PHP 版本 → 点【配置文件】,打开
php.ini - 搜索
extension=,确认项目依赖的扩展已开启,如pdo_mysql、curl、mbstring - 特别注意:PHP 7.4+ 默认关闭
short_open_tag,如果代码里用了... ?>,需手动开启或统一改为 - 修改后务必点击【重启 Nginx/Apache】,否则配置不生效
极少数情况需要模拟 each() 行为时的替代写法
仅当项目深度依赖数组内部指针(如某些老框架路由解析、自定义迭代器),且无法重构时,才考虑自定义函数。以下为正确实现,返回结构与原 each() 完全一致:
function myEach(&$arr) {<br> $key = key($arr);<br> if ($key === null) return false;<br> $val = current($arr);<br> next($arr);<br> return [0 => $key, 1 => $val, 'key' => $key, 'value' => $val];<br>}
使用方式:while (list($k, $v) = myEach($data)) { ... }。但请优先评估是否真有必要——99% 的业务逻辑用 foreach 更安全、更高效。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











