首页 > 解决方案 > 确定文件是否存在于多文件php上传中

问题描述

我有一个带有 3 个独立上传输入的表单

<input name="upload[]" type="file"  accept="application/pdf,application/vnd.ms-excel"  />
<input name="upload[]" type="file"  accept="application/pdf,application/vnd.ms-excel"  />
<input name="upload[]" type="file"  accept="application/pdf,application/vnd.ms-excel"  />

因此,我有一个可能包含 3 个文件的“上传”数组,其中 2 个是用户必须选择的,第三个是可选的

我想在提交到服务器时,确定是否已分别为文件 1 和文件 2 选择了文件

我已经使用了这段代码,但它告诉我的只是是否选择了任何文件,而不是专门针对文件 1 和文件 2:

   for($i=0; $i<3; $i++) {
     $tmpFilePath = $_FILES['upload']['tmp_name'][$i];
$strl = strlen($tmpFilePath) . $strl;

if($strl==???){
}
 //do something 
}

' 的想法。$strl' 我认为如果 for 代码在数组中循环,它会捕获每个临时名称(x 个字符长),但是无论我输入 1、2 还是 3 个文件,它总是返回相同的:14 或一个链接,例如:/tmp/phpVniKUq

我用上面的代码假设如果存在 2 个文件 $strl 将是 28,存在 3 个文件 42

标签: php

解决方案


您真的不应该尝试检查文件名长度。不能保证它们的长度为 14 个字符。

相反,您应该检查$_FILES全局错误代码(或检查文件大小)并根据成功上传继续,如下所示:

<?php 

var_dump($_FILES['upload']);
$uploadedCount = 0;
foreach($_FILES['upload']['error'] as $err) {
    if ($err === UPLOAD_ERR_OK) {
        $uploadedCount += 1;
    }
}

var_dump($uploadedCount);

?>
<form method="POST" enctype="multipart/form-data">
    <input name="upload[]" type="file" />
    <input name="upload[]" type="file" />
    <input name="upload[]" type="file" />

    <button>upload</button>
</form>

这会检查输入的错误代码并显示 PHP [0] 报告成功的文件数

截屏


推荐阅读