Search code examples
phpmysqlfile-uploadfile-type

php file upload, how to restrict file upload type


I have the following code to check if (resume and reference letter uploaded match desired type (pdf OR doc OR docx) and size (less than 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 }

This is not working as desired, allows even txt files through + the size limit is not being checked, what is wrong with it?

Thanks,


Solution

  • The below just uses the mime types to validate a file, then checks the size of both. For a list of most mime types see here or 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....
    
        }
    
        }
    
    }