2012-04-10 29 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."; 
         } 
       } 
     } 

問題是,我甚至可以上傳文件,所有的時間當非接受的結局是給出的。我不明白爲什麼上傳發生時,而不是上傳錯誤信息應該已經顯示。我喜歡通過嵌入允許的代碼擴展來獲得更多的安全性。如果有人能告訴我我做錯了什麼,我會很感激。非常感謝。

回答

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