2012-04-10 3 views
1

вчера я начал кодировать загружаемый файл для загрузки изображений в каталог. как я признал, что я должен использовать массивы, чтобы справиться с этим лучшим способом я попал в точку, что я использую в настоящее время:Загрузка изображений с помощью массивов

if(!empty($_FILES['image']['tmp_name'])){ 

       $allowed_extension = array('jpg', 'jpeg', 'png', 'bmp', 'tiff', 'gif'); 

       foreach($_FILES['image']['name'] as $key => $array_value){ 

        $file_name = $_FILES['image']['name'][$key]; 
        $file_size = $_FILES['image']['size'][$key]; 
      $file_tmp = $_FILES['image']['tmp_name'][$key]; 

        $file_extension = strtolower(end(explode('.', $file_name))); 
        if (in_array($file_extension, $allowed_extension) === false){ 
         $errors[] = 'file is not accepted'; 
         } 

        if ($file_size > 2097152){ 
         $errors[] = 'maxsize: 2MB'; 
         } 

        $path = "a/b/c/"; 
        $uploadfile = $path."/".basename($_FILES['image']['name'][$key]); 

        if (move_uploaded_file($_FILES['image']['tmp_name'][$key], $uploadfile)){ 
         echo "Das Bildmaterial wurde hochgeladen."; 
         } 
       } 
     } 

проблема заключается в том, что я могу загрузить файлы все время, даже когда не принимается окончание. Я не понимаю, почему происходит загрузка, когда вместо того, чтобы загружать errormessage, должно быть показано. Мне нравится получать дополнительную защиту с встраиванием разрешенных расширений в код. если есть кто-то, кто мог бы сказать мне, что я делаю неправильно, я бы очень признателен. большое спасибо.

ответ

1

У вас есть два if-операторы проверка исключений, но потом ничего не делать с ними.

Возможно, следующее поможет?

if(!empty($_FILES['image']['tmp_name'])){ 

    $allowed_extension = array('jpg', 'jpeg', 'png', 'bmp', 'tiff', 'gif'); 

    foreach($_FILES['image']['name'] as $key => $array_value){ 

     $file_name = $_FILES['image']['name'][$key]; 
     $file_size = $_FILES['image']['size'][$key]; 
     $file_tmp = $_FILES['image']['tmp_name'][$key]; 

     $errors = array(); 
     $file_extension = strtolower(end(explode('.', $file_name))); 
     if (in_array($file_extension, $allowed_extension) === false){ 
      $errors[] = 'file is not accepted'; 
     } 

     if ($file_size > 2097152){ 
      $errors[] = 'maxsize: 2MB'; 
     } 

     if (count ($errors) == 0) { 
      $path = "a/b/c/"; 
      $uploadfile = $path."/".basename($_FILES['image']['name'][$key]); 

      if (move_uploaded_file($_FILES['image']['tmp_name'][$key], $uploadfile)){ 
       echo "Das Bildmaterial wurde hochgeladen."; 
      } 
     } 
     else { 
      // do stuff with errors 
     } 
    } 
} 
1

Вы должны использовать «продолжать»

например

foreach($_FILES['image']['name'] as $key => $array_value){ 

    $file_name = $_FILES['image']['name'][$key]; 
    $file_size = $_FILES['image']['size'][$key]; 
    $file_tmp = $_FILES['image']['tmp_name'][$key]; 

    $file_extension = strtolower(end(explode('.', $file_name))); 
    if (in_array($file_extension, $allowed_extension) === false){ 
     $errors[] = 'file is not accepted'; 
     continue; 
    } 

    // the rest of your loop goes here 
} 

Он будет затем перейти к следующему изображению в петле и не загружать изображения.

Более подробная информация здесь: http://php.net/manual/en/control-structures.continue.php

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