2016-11-29 2 views
-2

Все еще получаю поддержку PHP здесь. Я видел другие вопросы, похожие на это, но я не могу понять, почему мой возвращает ложь. У меня есть форма, которая отправляет текст и прикрепляет файлы по электронной почте. Форма отправляет файлы как ожидалось, но как только я начал пытаться проверять файл, я начал получать ошибку. Почему моя проверка всегда возвращает false?Почему in_array() всегда возвращает false? php

$error = False; 
$file_type = $_FILES['upload']['type']; //returns the mimetype 

$allowed = array("image/jpeg", "image/png", "image/gif", "application/pdf"); 


$total = count($_FILES['upload']['name']); 
$attachments = "None"; 
$attachmentString = "No Attachments"; 

if(isset($_FILES['upload']['name']) && is_array($_FILES['upload']['name']) && count($_FILES['upload']['name']) > 0){ 

    // Loop through each file 
    for($i=0; $i<$total; $i++) { 
     //Get the temp file path 
     $tmpFilePath = $_FILES['upload']['tmp_name'][$i]; 

     //Make sure we have a filepath 
     if ($tmpFilePath != ""){ 
     $uploaddir = trailingslashit(realpath(__DIR__)) . 'uploads/'; 
     wp_mkdir_p($uploaddir); 
     //Setup our new file path 
     $newFilePath = $uploaddir . basename($_FILES['upload']['name'][$i]); 
     if(!in_array($file_type, $allowed)) { 
      $error = True; 
      echo "Error: Only jpg, gif, png, and pdf files are allowed.<br />"; 
     } 
     else 
     { 
      //Upload the file into the temp dir 
      if(move_uploaded_file($tmpFilePath, $newFilePath)) { 
       $attachments[$i] = $newFilePath; 
       //make string for mimetype headers in email 
       $attachmentString += implode($attachments[$i]) + ", "; 
      } 
     } 

    } 
} 

}

+2

пытаются 'var_dump ($ file_type)' и посмотреть, если это правильно. – Phiter

+1

'$ file_type' - __array__. И если вы распечатали это, вы увидите это. Но кто отлаживает сегодня? –

+0

Что делает echo $ file_type перед тем, как дать in_array? Вам также может потребоваться добавить изображение/jpg в массив типов файлов – dpp

ответ

2

При обновлении нескольких файлов в РНР mimetype каждого файла попадает в переменную $_FILES['userfile']['type'][$i].

В вашем коде вы проверяете, существует ли значение $_FILES['userfile']['type'] (которое есть массив) в типах $allowed (и это всегда неверно).

Вы можете изменить свой код на:

for($i=0; $i<$total; $i++) { 
    .... 
    $file_type = $_FILES['upload']['type'][$i]; //returns the mimetype 
    .... 
    if(!in_array($file_type, $allowed)) { 
     $error = True; 
     echo "Error: Only jpg, gif, png, and pdf files are allowed.<br />"; 
    } 
    .... 
} 
+0

Спасибо, что исправил это! –

Смежные вопросы