2015-10-26 1 views
0

J'ai un système de téléchargement de fichiers dans un site qui permet le téléchargement de fichiers .doc, .docs et .pdf. Actuellement, le script PHP permet le téléchargement de tout type de fichier. Je voudrais limiter cela à autoriser uniquement le téléchargement de fichiers DOC et DOCX authentiques. J'ai lu que c'est mieux fait en vérifiant le type MIME/en-têtes du fichier - mais ne peux pas sembler trouver une meilleure solution convenue de le faire n'importe où.Upload de PHP MIME restrictions de type

Des conseils sur la meilleure façon d'y parvenir?

PHP upload actuel est:

$meta = $dropbox->UploadFile($_FILES["fileInputFieldName"]["tmp_name"], $upload_name); 

Appréciez des conseils sur la façon d'intégrer dans les suggestions s'il vous plaît.

+0

http://stackoverflow.com/questions/ 11601342/upload-doc-or-pdf-using-php –

+0

Utiliser si condition sur l'extension de nom de fichier. –

Répondre

3

Pourquoi ne pas vous essayez le code ci-dessous

$sys = mime_content_type($_FILES["fileToUpload"]["tmp_name"]); 
if($sys == 'application/x-zip' || $sys == 'application/msword'){ 
    echo ' allowed'; 
}else{ 
    echo 'not allowed'; 
} 
+0

Vous pouvez utiliser finfo_file si vous utilisez PHP5 et supérieur. – Justin

+0

Merci Justin, donc, de mettre en œuvre cela à mon utilisation - quels éléments dois-je changer pour refléter mon système fileupload. Pourquoi avons-nous besoin d'un élément "tmp_name"? – dubbs

+0

@dubbs 'tmp_name' n'est pas un élément. C'est la propriété de l'image – Butterfly

0
that is how i restrict extension for image, you can apply this for doc and other files you want.. 

"i converted $_FILES to $file" 

if ($file['profile_pic']['error'] == 0) { 
             // echo 'hello'; 
           $fileName = strtolower($file['profile_pic']['name']); 
           $fileType = $file['profile_pic']['type']; 
           $tempName = $file['profile_pic']['tmp_name']; 
           $fileSize = $file['profile_pic']['size']; 

           $fileExtArray = array('image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'public.jpeg'); 
           $random_no = mt_rand() * 64; 
           $uploaddir = '../../Application/img/'; 
           $file_name = $random_no . "_profile_" . $_FILES['profile_pic']['name']; 
           $image = $uploaddir . basename($file_name); 
           if (in_array($fileType, $fileExtArray)) 
            move_uploaded_file($_FILES['profile_pic']['tmp_name'], $image); 
          } 
0
  $allowedExts = array("bmp", "gif", "jpg","png","jpeg"); 
          $RandomNum = rand(0, 9999);   
          $ImageName  = str_replace(' ','-',strtolower($_FILES['uploadedimage']['name'])); 
          $ImageType  = $_FILES['uploadedimage']['type']; //"document/txt", document/doc etc. 
          $ImageExt = substr($ImageName, strrpos($ImageName, '.')); 
          $ImageExt = str_replace('.','',$ImageExt); 
          if (!empty($_FILES["uploadedimage"]["name"])) 
          { 
           if(!in_array($ImageExt, $allowedExts)) 
           { 
            $message.="<span class='error-message'>Invalid file format of image, only <b>'bmp', 'gif', 'jpg','png','jpeg'</b> allowed.</span><br>"; 
           } 
          } 
          if(isset($message) && $message=='') 
          { 
           //image 
           $temp_name=$_FILES["uploadedimage"]["tmp_name"]; 
           $imagename=time().'-'.$ImageName; 
           $target_path = "../profile-images/".$imagename; 
           $_SESSION['message']=$message; 
           } 
0

J'ai utilisé ce à la fin pour les personnes intéressées:

$allowedExts = array(
    "pdf", 
    "doc", 
    "docx" 
); 

$allowedMimeTypes = array( 
    'application/msword', 
    'application/pdf', 
    'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 
    'application/x-pdf', 
    'application/vnd.pdf', 
    'text/pdf' 
); 

$extension = end(explode(".", $_FILES["file"]["name"])); 

if (! (in_array($extension, $allowedExts))) { 
    die('Please provide another file type [E/2].'); 
} 

if (in_array($_FILES["file"]["type"], $allowedMimeTypes)) 
{  
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); 
} 
else 
{ 
die('Please provide another file type [E/3].'); 
} 
+0

Mais juste testé et j'ai pris un fichier JPG et lui a donné une extension de fichier .pdf et il a passé cette validation ... ??? – dubbs

+0

Ce n'est pas sûr: la propriété 'type' est envoyée par le navigateur et peut être truquée, ou ne pas correspondre aux navigateurs reconnaissant incorrectement le type (c'est probablement ce qui est arrivé dans le cas JPG vs PDF). La réponse de Justin est la seule qui soit sûre. –