each()函数已废弃,请求将PHP上传文件代码改为foreach循环
替换废弃each()为foreach的修改方案
没问题,我帮你把这段PHP上传代码里的废弃each()循环改成现代的foreach写法,还顺便加了点实用的调试判断,让代码更健壮~
修改后的完整代码
<?php ini_set('error_reporting', E_ALL); // 开启全量错误报告,方便调试 // 处理上传文件保存逻辑 $i = 1; // 用foreach直接遍历$_FILES的键值对,替代已废弃的each()函数 foreach ($_FILES as $item => $value) { // 判断当前文件字段名是否以imageloader开头 if (substr($item, 0, 11) == 'imageloader') { // 生成目标文件名:数字序号 + 字段名后3位的后缀 $fileName = $i . '.' . substr($item, 11, 3); // 移动上传文件时增加结果判断,方便排查问题 if (move_uploaded_file($value['tmp_name'], $fileName)) { echo "文件 {$fileName} 已成功保存<br>"; } else { echo "文件 {$fileName} 保存失败,请检查权限或临时文件有效性<br>"; } $i++; } } ?>
关键改动说明
- 替换each()为foreach:原代码用
while (list ($item, $value) = each ($_FILES))遍历上传文件数组,现在直接用foreach ($_FILES as $item => $value),这是PHP遍历关联数组键值对的标准写法,和原逻辑完全一致,但避免了each()函数在PHP7.2+被废弃的问题。 - 增加上传结果判断:原代码没有检查
move_uploaded_file的返回值,一旦文件保存失败(比如权限不足、临时文件丢失)根本不知道问题出在哪,新增的判断能帮你快速定位问题。
内容的提问来源于stack exchange,提问作者Kim Anov
相关产品推荐
相关产品推荐

