2014-04-24 156 views
0

你好,我正在開發上傳圖片上傳系統。我有一些限制,例如只允許某些類型的圖像取決於擴展名(jpg,jpeg,png ...)。如何限制上傳大小?

驗證的那部分工作得很好。我通過上傳PDF文件進行測試,並得到了我期待的錯誤,並且文件未上傳。我也有一個if語句來確保文件大小小於200KB。但是,這不起作用。即使它們太大,2MB的圖像也會上傳。這個想法是上傳5張圖片。

下面是相關的PHP的代碼:

include_once 'db.inc.php';

for($int = 1; $int <= 5; $int++){ 
    $str = (string) $int; 
    $inputName = 'image' . $int; 

    if(isset($_FILES[$inputName]['name'])){ 
     $name = $_FILES[$inputName]['name']; 
     $size = $_FILES[$inputName]['size']; 
     $type = $_FILES[$inputName]['type']; 
     $tmp_name = $_FILES[$inputName]['tmp_name']; 
     $error = $_FILES[$inputName]['error']; 
     $dest = 'uploads/'; 
     echo $size; 
     echo $name; 

     if(!empty($name)){ 
      global $dest; 
      global $tmp_name; 
      global $size; 
      global $name; 

      $jpg = 'image/jpg'; 
      $jpeg = 'image/jpeg'; 
      $pjpeg = 'image/pjpeg'; 
      $x_png = 'image/x-png'; 
      $png = 'image/png'; 
      $gif = 'image/gif'; 
      $bmp = 'image/bmp'; 

      $allowedExts = array('jpg','jpeg','png','bmp'); 
      $temp = explode('.',$name); 
      $ext = end($temp); 

      if($_FILES[$inputName]['type'] == $jpg 
      or $_FILES[$inputName]['type'] == $jpeg or $_FILES[$inputName]['type'] == $pjpeg 
      or $_FILES[$inputName]['type'] == $x_png or $_FILES[$inputName]['type'] == $png 
      or $_FILES[$inputName]['type'] == $png or $_FILES[$inputName]['type'] == $gif 
      or $_FILES[$inputName]['type'] == $bmp) 
      { 
       if(!$size < 200000){ 
        echo '<p>' . $name . 'Is too big' . '</p>'; 
        if(!in_array($ext, $allowedExts)){ 
         echo '<p>' . $name . 'Is not an image' . '</p>' 
        } 
       }else{ 
        move_uploaded_file($tmp_name, $dest.$name); 
       } 
      } 

      else{ 
       global $name; 
       echo '<div><p style="background:black;color:red;font-size:14px;position:relative;top:5px;left:30px"><span>' . $name . ' is either too big or not an image' . '</span></p></div>'; 
      } 
     } 
    } 
    $int = (int) $str; 
} 

所以這是PHP的,這裏是有關HTML還以供參考:

      "<div class="fieldRow"><label class="image1" for="image 1" style="display:block;width:100%;">Image 1: <input class="pickImage" name="image1" type="file" /><?php ;?></label></div> 
          <div class="fieldRow"><label class="image2" for="image 2" style="display:block;width:100%;">Image 2: <input class="pickImage" name="image2" type="file" /><?php ;?></label></div> 
          <div class="fieldRow"><label class="image3" for="image 3" style="display:block;width:100%;">Image 3: <input class="pickImage" name="image3" type="file" /><?php ;?></label></div> 
          <div class="fieldRow"><label class="image4" for="image 4" style="display:block;width:100%;">Image 4: <input class="pickImage" name="image4" type="file" /><?php ;?></label></div> 
          <div class="fieldRow"><label class="image5" for="image 5" style="display:block;width:100%;">Image 5: <input class="pickImage" name="image5" type="file" /><?php ;?></label></div>" 

整個形式遠大於並擁有適當ENC_TYPE用後一種方法的屬性一起和具有php文件名稱的值的action屬性。如果你能指點我的方向,這將是非常有益的。

+0

是什麼呢? 'global $ size'以前似乎覆蓋了'$ size'中的內容。 – Piskvor

回答

1

地址:

<input type="hidden" name="MAX_FILE_SIZE" value="512000" /> 

到HTML表格,然後在PHP你選擇了它:

// Error Checking Extended 
    if($_FILES['image1']['error'] == 2) { // Change to your file field 
    echo "You've exceeded the maximum file upload size of 512kb."; 
    return false; 
    } 

編輯:

我把它留給你要如何工作與數據,如果它是更容易做每個單獨的文件比複製它,但重新因子和乾淨的代碼,我會建議你循環此$ _POST數組。

+0

+1爲隱藏的輸入類型 – Guns

0

你可以使用:

ini_set("upload_max_filesize", "20M");