загрузка php файла, как ограничить тип загрузки файла - PullRequest
1 голос
/ 06 сентября 2011

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

//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 файлы через + ограничение размера не проверяется, что с ним не так?

Спасибо,

Ответы [ 5 ]

5 голосов
/ 06 сентября 2011

В приведенном ниже примере используются только типы 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....

    }

    }

}
0 голосов
/ 06 сентября 2011

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

Сначала проверьте нужные типы 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 intead расширения !!=)

0 голосов
/ 06 сентября 2011

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

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
}
0 голосов
/ 06 сентября 2011

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

$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-типа

0 голосов
/ 06 сентября 2011

MIME-тип для docx - application/vnd.openxmlformatsofficedocument.wordprocessingml.document

...