2012-02-26 28 views
9

我試着去確定MIME類型上傳文件,我想對FileInfo(使用),這是香港專業教育學院一直在努力,它不是工作:Finfo_file上載的文件來確定MIME類型

$uploadedfile = $_FILES['soup']['tmp_name']; 
if(isset($uploadedfile)) 
{ 
    $uploadedname = $_FILES['soup']['name']; 
    $file=$uploadedsong; 
    $file.=$uploadedname; 
    $finfo = finfo_open(FILEINFO_MIME_TYPE); 
    $mime = finfo_file($finfo, $file); 

不幸的是,finfo_file似乎並沒有運行,我假設我有以下$file設置不正確,這是否有一種方法,我可以做到這一點與新上傳的文件使用$_FILE這樣嗎?或者我會以完全不正確的方式解決這個問題。使用我已預先設置在另一個文件中,並設置$file="folder/file.doc"正常工作。

回答

18

您應該將路徑傳遞給finfo_file函數而不是文件名。

<?php 
if (isset($_FILES['soup']['tmp_name'])) { 
    $finfo = finfo_open(FILEINFO_MIME_TYPE); 
    $mime = finfo_file($finfo, $_FILES['soup']['tmp_name']); 
    if ($mime == 'application/msword') { 
     //Its a doc format do something 
    } 
    finfo_close($finfo); 
} 
?> 
+0

在你的php.ini文件中,確保你有這個條目:extension = fileinfo.so 或在windows中:php_fileinfo.dll – metamagicson 2015-03-13 08:04:29

-1

我知道這是有點老了,但因爲你正在使用的$_FILES超級全局的,你可以使用文件陣列的類型鍵(即$_FILES['soup']['type']),而不是服務器檢查一次文件上傳?

+3

使用$ _FILES數組參數來驗證文件類型是可欺騙的。這就是爲什麼finfo_file被創建的原因,所以我們可以實際檢查文件的二進制文件,以確定它是否真的是一個圖像文件,而不是一個php文件,其文件擴展名重命名爲jpg,在這種情況下$ _FILES數組類型會給jpg。 – jessiPP 2015-10-13 05:11:07

0

我使用finfo()buffer()功能以及file_get_contents()從PHP平臺如下

$finfo = new finfo(FILEINFO_MIME); 
$mimetype = $finfo->buffer(file_get_contents($filename)); #gives you mime type 

你需要在php 5.3或更高版本,並確保您有finfo()擴展安裝。對於linux extension=fileinfo。而在Windows:php_fileinfo.dll

你可以接受的MIME類型的數組,然後檢查是否數組

$acceptedMime = []; 
if(in_array($mimetype, $acceptedMime, true) === true){ 
    #mime type is valid. Proceed! 
} 

另一種選擇中的存在是爲了避免檢查MIME類型將完全存放文件上傳超出文檔根文件夾。