загрузка файла php, как ограничить тип загрузки файла

У меня есть следующий код для проверки: (возобновление и отправку ссылочного письма соответствует желаемому типу (pdf OR doc OR docx) и размеру (менее 400 kb)

//check file extension and size $resume= ($_FILES['resume']['name']); $reference= ($_FILES['reference']['name']); $ext = strrchr($resume, "."); $ext1 = strrchr($reference, "."); if (!(($_FILES["resume"]["type"] == "application/doc") || ($_FILES["resume"]["type"] == "application/docx") || ($_FILES["resume"]["type"] == "application/pdf" )) && (($_FILES["reference"]["type"] == "application/doc") || ($_FILES["reference"]["type"] == "application/docx") || ($_FILES["reference"]["type"] == "application/pdf")) && (($ext == ".pdf") || ($ext == ".doc") || ($ext == ".docx")) && (($ext1 == ".pdf") || ($ext1 == ".doc") || ($ext1 == ".docx")) && ($_FILES["resume"]["size"] < 400000) //accept upto 500 kb && ($_FILES["reference"]["size"] < 400000)) { stop user } else { allow files to upload } 

Это не работает по желанию, позволяет даже файлы txt с + ограничение размера не проверяться, что с ним не так?

Благодаря,

В приведенном ниже примере используются типы mime для проверки файла, а затем проверяется размер обоих. Список большинства типов mime см. Здесь или в Google.

 function allowed_file(){ //Add the allowed mime-type files to an 'allowed' array $allowed = array('application/doc', 'application/pdf', 'another/type'); //Check uploaded file type is in the above array (therefore valid) if(in_array($_FILES['resume']['type'], $allowed) AND in_array($_FILES['reference']['type'], $allowed)){ //If filetypes allowed types are found, continue to check filesize: if($_FILES["resume"]["size"] < 400000 AND $_FILES["reference"]["size"] < 400000 ){ //if both files are below given size limit, allow upload //Begin filemove here.... } } } 

Тип Mime для docxapplication/vnd.openxmlformatsofficedocument.wordprocessingml.document

Вот код, который я написал в прошлом.

 function checkFileExtension($ext) { if ($ext == 'ai' || $ext == 'pdf' || $ext == 'jpg' || $ext == 'jpeg' || $ext == 'gif' || $ext == 'eps' || $ext == 'tif' || $ext == 'png' || $ext == 'xls' || $ext == 'xlsx' || $ext == 'doc' || $ext == 'docx' || $ext == 'ppt' || $ext == 'pptx' || $ext == 'zip' || $ext == 'rar' || $ext == 'sitx' || $ext == 'psd' || $ext == 'indd' || $ext == 'dng') { $pass = (int)1; } else { $pass = (int)0; } return (int)$pass; } $ext = substr(strrchr($_FILES['file']['name'], "."), 1); $fileAccepted = checkFileExtension($ext); $fileSize = $_FILES['file']['size']; if($fileAccepted==1 && $fileSize > '82428800'){ // do stuff } 

Для этого я обычно использую что-то вроде этого:

 $filename = $_FILES['field_name']['name']; // Get the name of the file (including file extension). $ext = strtolower(substr($filename, strpos($filename,'.'), strlen($filename)-1)); //get the extention in lower case 

И проверьте, если расширение файла принято.

Также имейте в виду, что пользователь может просто изменить расширение для опасного файла, поэтому безопаснее проверять тип mime

Это может быть полезно:

Сначала проверьте требуемые типы mime для проверки:

Типы MIME для Microsoft Office и список типов MIME

Затем попробуйте сделать код проще …

  $mimeTypes = array('application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.openxmlformats-officedocument.presentationml.presentation'); if (in_array($_FILES["resume"]["type"], $mimeTypes)) { // File's OK } else { // Bad file ! } 

Важно: Пользователь может изменить расширение файла, поэтому всегда проверяйте тип mime на расширение! знак равно