如何使用PHP验证多个上传的文件?

时间:2016-09-18 07:24:08

标签: php

我使用PHP将多个文件上传到数据库。因此,当我检查文件扩展名时,即使文件扩展名正确,它也始终显示我给出的错误消息:

  

不允许使用文件类型,我们只接受.jpg,.png和.gif扩展名   文件

以下是验证:

$total = count($_FILES['client_doc']['name']);                  
for($i=0; $i<$total; $i++) {
    $file_name = htmlspecialchars($_FILES['client_doc']['name'][$i]);
    $file_tmp =  htmlspecialchars($_FILES['client_doc']['tmp_name'][$i]);
    $file_size = htmlspecialchars($_FILES['client_doc']['size'][$i]);
    $file_ext = explode('.', $file_name);
    $file_ext = strtolower(end($file_ext));
    $allowed_type =  array('jpg', 'jpeg', 'gif', 'png');
}

if(!empty($file_name)) {
    if(!in_array($file_ext, $allowed_type)) {
        $msg[] = 'File type is not allowed, We accept only .jpg, .png and .gif extension file';
        $msg['error'] = true;
    }elseif($file_size > 2097152) { // only 2 mb size is allowed
        $msg[] = 'Uploaded file name must be less than 2MB';
        $msg['error'] = true;                            
    }
}

1 个答案:

答案 0 :(得分:0)

我通过提供$file_name变量test.png值来测试您的代码,它运行正常。您确定文件格式正常吗?在echo $file_name循环结束时尝试for,检查是否有任何输出。

另一个提示:

  1. 您要验证所有文件吗?就我而言,您当前的代码仅验证最后一个文件 - 您遍历所有文件,但是您覆盖存储文件数据的变量。为了验证所有元素,您必须将条件置于for循环中。
  2. 由于您的$allowed_type是常量,因此您无需在循环内覆盖它。