2012-01-05 9 views
1

ファイルをアップロードするために次のphp関数を記述しましたが、許可されたファイルタイプの配列には苦労しています。 1つのファイルタイプ、つまりimage/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

ファイルの種類とサイズができるので、検証のためにスーパーグローバル$ _fileの内容を使用したくありません簡単にクライアント側を偽装することができます。 tmp_fileを使用してファイルサイズを取得し、自分でタイプしたいと思うでしょう。ファイルの拡張子を検証したい場合もあります。基本的に上記のコードでは、私はあなたのサーバーのほとんどを引き継ぐことができるファイルを簡単にアップロードできます。 – dqhendricks

答えて

0

変更この行:これに

$mcAllowedFTypes = array($mcAllowedFileTypes); 

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

ありがとう!できます。 – user1002039

+0

心配はいりません。 FYIでは、使用していたメソッドを使用するために、行全体を引用符で囲み、eval()関数をラップする必要がありました。 – SmokeyPHP

関連する問題