2015-10-26 3 views
0

У меня есть система загрузки файлов на сайте, которая позволяет загружать файлы .doc, .docs и .pdf. В настоящее время PHP-скрипт позволяет загружать любой тип файла. Я хотел бы ограничить его только возможностью загрузки подлинных файлов PDF DOC и DOCX. Я прочитал, что это лучше всего сделать с помощью проверки типа MIME/заголовков файла, но, похоже, не найдено подходящего решения для этого.PHP upload Ограничения типа MIME

Любые советы по наилучшему способу достижения этого?

Текущий PHP загрузки является:

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

Цените какие-либо советы о том, как интегрировать это в предложения, пожалуйста.

+0

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

+0

использовать, если условие на расширение имени файла. –

ответ

3

Почему бы вам не попробовать код ниже

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

Вы можете использовать finfo_file, если используете PHP5 и выше. – Justin

+0

Спасибо Justin, поэтому, чтобы реализовать это для моего использования - какие элементы я могу изменить, чтобы отразить мою файловую систему. Зачем нам нужен элемент "tmp_name"? – dubbs

+0

@dubbs 'tmp_name' не является элементом. Это свойство изображения – 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

Я использовал это в конце концов, для тех, кто заинтересован:

$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

Но только что протестировано, и я взял файл JPG и дал ему расширение .pdf, и оно прошло эту проверку ... ??? – dubbs

+0

Это небезопасно: свойство 'type' отправляется браузером и может быть фальшивым или падать в браузерах, неправильно распознающих тип (это, вероятно, то, что произошло в случае JPG и PDF). Ответ Джастина - единственный безопасный. –

Смежные вопросы