2016-06-27 3 views
-1

업로드 시스템을 만들고있어 이미지 확장명 (예 : jpg/jpeg/gif) 이외의 파일 형식을 업로드 할 때마다 스크립트가 중단됩니다. phpstorm을 다시 시작할 때까지 PHP가로드되지 않으며 코드가 실제로 작습니다. 사용자가 .exe 또는 다른 파일 확장자를 업로드하는 것을 원하지 않습니다.사용자가 .exe 파일을 업로드하면 PHP가 작동을 멈 춥니 다.

if (!$_FILES['file']['tmp_name']) 
{ 
    $uploaderrors[] = "Please choose image"; 
} 
$check = getimagesize($_FILES['file']['tmp_name']); 
if($check == false) 
{ 
    $uploaderrors[] = "Please choose image"; 
} 
} 

스크립트는 나누기의 UX 유적 :

여기 내 코드입니다. 어쨌든 내가 고칠 수 있니?

+0

이 문제는 파일 크기와 관련이 있으며 확장명과 관련이 없습니다. – Kld

+0

오류 로그를 확인 했습니까? 그리고 문제는 형식 문제가 아닌 파일 크기 문제입니까? –

+0

답장을 보내 주셔서 감사합니다. 예. 오류 로그를 확인했습니다. 오류가 표시되지 않습니다. 내가 생각했던 것도 그거야. 어떻게 그 일을 막을 수 있습니까? 모든 것이 잘 작동합니다. .webp 및 .exe 및 기타 확장명이 필요합니다. 사용자가 우연히 이들 중 하나를 업로드하면 어떻게 될까요? –

답변

0

자바 스크립트 (아마도 JQuery)를 사용하여 PHP가 실행되기 전에 사용자가 올바른 파일 형식을 업로드했는지 확인하기 만하면됩니다. 클라이언트 측에서이를 수행하는 한 가지 방법 일 수 있습니다. 다음은 그 예입니다.

 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script> 
     <script type="text/javascript"> 
      (function($) { 
       $(document).ready(function(){ 
        // ASSUMING THAT YOUR FILE INPUT HAS A CLASS-NAME OF "file_upload" 
        // WE CAN SIMPLY GRAB IT INTO A VARIABLE LIKE SO: 
        var pixFile = $(".file_upload"); 

        // NOW, WHEN THE USER INTERACTS WITH THIS FILE-INPUT 
        // WE CAN REACT TO THE CHANGE EVENT... 
        pixFile.on("change", function(evt){ 
         var dis_val  = $(this).val(); 

         // IF USER TRIES TO UPLOAD ANYTHING OUTSIDE ACCEPTABLE/VALID IMAGE FORMATS 
         // WE INFORM HIM OF OUR PREFERENCES: HERE WE ARE USING ALERT... 
         if(!/(\.)(jpg|jpeg|png|gif|bmp)$/.test(dis_val)){   // ADD OTHER FORMATS YOU WISH TO SUPPORT: 'tiff, psd, pdf' 
          alert("You can only upload image Files (JPG, JPEG, PNG, GIF, BMP)"); // ADD OTHER FORMATS YOU WISH TO SUPPORT 

          // THEN IMMEDIATELY RESET THE VALUE OF THE UPLOADED FILE TO NULL 
          $(this).val(null); 
          return false; 
         }else{ 
          // OTHERWISE: WE KNOW THAT USER UPLOADED THE ACCEPTABLE FILE FORMAT(S) 
          // YOU MAY OR MAY NOT WANT TO REACT TO THIS... THE CHOICE IS YOURS 
          // AND YOU MAY AS WELL JUST DELETE THE ENTIRE ELSE CLAUSE (IF YOU SO WISH) 
         } 
        }); 
       }); 
      })(jQuery); 
     </script> 
+1

하지만 클라이언트 측에서 유효성을 확인하는 것이 좋지 않습니까? 내가 틀렸다면 나를 바로 잡으십시오. –

+0

@theprogrammer 당신은 ** 정말로 ** 검증을하지 않고 있습니다 ... 당신은 단순히 당신의 사용자가 선호하는 파일 형식을 업로드했는지 확인하고 있습니다. 실제로는 서버 측에서이 모든 작업 (* 파일 형식 제어 *)을 수행 한 다음 잘못된 파일 형식을 업로드 한 경우 오류 메시지와 함께 반환해야합니다. 두 가지 방법 모두 작동합니다 : 그러나 하나는 아주 간단하고 편리하지만 어떤 방법을 선택 하든지 선택할 수 있습니다 ;-) – Poiz

+0

사용자가 ** 우회 ** 할 수 없으므로이 권리가 있습니까? –

관련 문제