2016-09-18 60 views
0

我正在使用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;        
    } 
} 

回答

0

我已經給$file_name變量test.png值,並將其WOR測試你的代碼很好。你確定你的文件格式正確嗎?在for循環的末尾嘗試echo $file_name的結尾並檢查是否有任何輸出。

另一個提示:

  1. 你想驗證所有的文件嗎?就我而言,您當前的代碼只驗證最後一個文件 - 您遍歷所有文件,但覆蓋存儲文件數據的變量。爲了驗證所有元素,您必須將條件放入for循環中。
  2. 因爲您的$allowed_type是一個常數,您不必在循環內覆蓋它。