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