2012-01-05 2 views
1

파일을 업로드하기 위해 다음 php 함수를 작성했지만 허용 된 파일 유형 배열에 어려움을 겪고 있습니다. 하나의 파일 유형, 즉 이미지/PNG 만 지정하면 정상적으로 작동합니다. 하나 이상을 지정하면 작동하지 않습니다. 허용 된 파일 형식을 결정하기 위해 in_array() 함수를 사용하지만 올바르게 사용하는 방법을 알아낼 수 없습니다.PHP 파일 유형 유효성 검사

감사합니다.

function mcSingleFileUpload($mcUpFileName, $mcAllowedFileTypes, $mcFileSizeMax){ 
    if(!empty($mcUpFileName)){ 

     $mcIsValidUpload = true; 

     // upload directory 
     $mcUploadDir = UPLOAD_DIRECTORY; 

     // current file properties 
     $mcFileName = $_FILES[$mcUpFileName]['name']; 
     $mcFileType = $_FILES[$mcUpFileName]['type']; 
     $mcFileSize = $_FILES[$mcUpFileName]['size']; 
     $mcTempFileName = $_FILES[$mcUpFileName]['tmp_name']; 
     $mcFileError = $_FILES[$mcUpFileName]['error']; 

     // file size limit 
     $mcFileSizeLimit = $mcFileSizeMax; 

     // convert bytes to kilobytes 
     $mcBytesInKb = 1024; 
     $mcFileSizeKb = round($mcFileSize/$mcBytesInKb, 2); 

     // create array for allowed file types 
     $mcAllowedFTypes = array($mcAllowedFileTypes); 

     // create unique file name 
     $mcUniqueFileName = date('m-d-Y').'-'.time().'-'.$mcFileName; 

     // if file error 
     if($mcFileError > 0) 
     { 
      $mcIsValidUpload = false; 
      mcResponseMessage(true, 'File error!'); 
     } 

     // if no file error 
     if($mcFileError == 0) 
     { 
      // check file type 
      if(!in_array($mcFileType, $mcAllowedFTypes)){ 
       $mcIsValidUpload = false; 
       mcResponseMessage(true, 'Invalid file type!'); 
      } 

      // check file size 
      if($mcFileSize > $mcFileSizeLimit){ 
       $mcIsValidUpload = false; 
       mcResponseMessage(true, 'File exceeds maximum limit of '.$mcFileSizeKb.'kB'); 
      } 

      // move uploaded file to assigned directory 
      if($mcIsValidUpload == true){ 
       if(move_uploaded_file($mcTempFileName, $mcUploadDir.$mcUniqueFileName)){ 
        mcResponseMessage(false, 'File uploaded successfully!'); 
       } 
       else{ 
        mcResponseMessage(true, 'File could not be uploaded!'); 
       } 
      } 
     } 
    } 
} 
//mcRequiredFile('mcFileUpSingle','please select a file to upload!'); 
mcSingleFileUpload('mcFileUpSingle', 'image/png,image/jpg', 2097152); 
+0

, 파일 종류와 크기가 수 있기 때문에 쉽게 스푸핑 된 클라이언트 측 일 수 있습니다. tmp_file을 사용하여 파일 크기와 유형을 직접 얻고 자 할 것입니다. 당신은 또한 파일 확장자의 유효성 검사를 원할 것입니다. 기본적으로 위 코드를 사용하면 대부분의 서버를 인계받을 수있는 파일을 매우 쉽게 업로드 할 수 있습니다. – dqhendricks

답변

0

변경이 줄이로

$mcAllowedFTypes = array($mcAllowedFileTypes); 

: 당신은 확인을 위해 슈퍼 세계적인 $ _file의 내용을 사용하지 것이다

$mcAllowedFTypes = explode(',',$mcAllowedFileTypes); 
+0

감사합니다! 그것은 작동합니다. – user1002039

+0

걱정할 필요가 없습니다. 참고로, 사용하고있는 메서드를 사용하려면 전체 라인을 따옴표로 묶고 eval() 함수를 래핑해야합니다. – SmokeyPHP