You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PHP中array_filter()参数错误:传入null而非数组问题求助

解决PHP多文件上传时array_filter()参数为null的问题

看起来你的核心问题是**$_FILES['fichier']['name']返回了null**,这直接导致array_filter()抛出警告。结合你提到的“法语版本正常、英语版本失效”,大概率是英语版的表单设置出了问题,和代码本身关系不大,咱们一步步排查:

1. 检查表单的文件输入name属性

多文件上传时,HTML文件输入的name必须带方括号[],这样PHP才会把多个文件解析成数组。你法语版的表单应该是这样的:

<input type="file" name="fichier[]" multiple>

请确认英语版的表单里,这个name是否还是fichier[]——很可能在翻译或修改页面时,不小心把name改成了其他值(比如files[]),或者漏掉了方括号,导致PHP无法识别为数组,最终$_FILES['fichier']不存在,返回null。

2. 必须设置表单的enctype属性

表单如果没有设置enctype="multipart/form-data",PHP完全无法接收上传的文件,$_FILES会是空数组。确保你的英语版表单标签是:

<form method="POST" enctype="multipart/form-data" action="你的处理脚本路径">
  <!-- 其他表单元素 + 文件输入 -->
</form>

这是文件上传的必要条件,法语版肯定是设置了的,英语版可能遗漏了。

3. 给代码增加容错性

为了避免后续再出现类似错误,建议在使用$_FILES前先做存在性检查:

// 先判断是否接收到合法的文件数组
if (!isset($_FILES['fichier']) || !is_array($_FILES['fichier']['name'])) {
    echo "错误:未接收到上传文件,请检查表单设置";
    exit;
}

$files = array();
$count = count(array_filter($_FILES['fichier']['name']));
echo $count;

for($i=0;$i<$count;$i++){
    array_push($files, $_FILES['fichier']['tmp_name'][$i]);
}

为什么法语版正常?

因为法语版的表单完全符合两个核心要求:name="fichier[]"enctype="multipart/form-data",所以PHP能正确解析上传的文件数组;而英语版在页面修改过程中破坏了这两个设置,导致$_FILES['fichier']不存在,最终array_filter()接收到null参数报错。

内容的提问来源于stack exchange,提问作者Tweakdev

火山引擎 最新活动