2014-04-24 5 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; 
} 

는 그래서 여기에 관련 HTML는 참조 용으로도, PHP는했다 :

      "<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"); 
관련 문제