2012-04-10 19 views
1

Gestern begann ich eine Upload-Datei zum Hochladen von Bildern in ein Verzeichnis zu kodieren. wie ich erkannt, dass i-Arrays verwenden, um zu handhaben, dass eine bessere Art, wie ich zu dem Punkt, dass ich verwende jetzt:Hochladen von Bildern mit Hilfe von Arrays

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."; 
         } 
       } 
     } 

das Problem ist, dass ich die Dateien die ganze Zeit selbst hochladen kann, wenn ein nicht akzeptiertes Ende ist gegeben. Ich verstehe nicht, warum das Hochladen geschieht, wenn statt des Hochladens die Fehlermeldung angezeigt werden sollte. Ich möchte etwas mehr Sicherheit erreichen, indem ich erlaubte Erweiterungen des Codes einbettle. Wenn es jemanden gibt, der mir sagen kann, was ich falsch mache, würde ich mich sehr freuen. Danke vielmals.

Antwort

1

Sie haben zwei if-Anweisungen für Ausnahmen überprüft, aber dann mit ihnen nichts zu tun.

Vielleicht hilft das folgende?

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

Sie sollten verwenden „weiter“

zB

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 
} 

Es wird dann in der Schleife zum nächsten Bild gehen und nicht das Bild hochladen.

Weitere Informationen hier: http://php.net/manual/en/control-structures.continue.php

Verwandte Themen