2013-07-19 101 views
0

對於上傳的文件類型檢查,我已經實現:如何檢查上傳的文件是否是PDF在PHP

$_FILES["file"]["type"][$i] == 'application/pdf' 

然而,這種檢查不會對正常工作的情況下,我改變了擴展名。

於是,經過一番研究,我已經試過

$finfo = new finfo(); 
$fileMimeType = $finfo->file($_FILES["file"]["name"][$i]); 

OR:

$finfo = finfo_open(FILEINFO_MIME_TYPE); 
$fileMimeType = finfo_file($finfo,$_FILES["file"]["name"][$i]) 

然而,$ fileMimeType回聲罷了。

如何解決這個問題?謝謝

+2

$filename = "pdffile"; $handle = fopen($filename, "r"); $header = fread($handle, 4); fclose($handle); 

檢查$頭,你可以使用'file' shell命令,或'fread'文件的前幾個字節,那麼你就可以知道類型。 – DevZer0

+0

你會介意提供一個上傳文件的例子嗎?謝謝 – user782104

+0

爲什麼要更改擴展名? – 2013-07-19 09:23:48

回答

1

我想這個問題是使用:

$_FILES["my_file"]["name"] 

,因爲它僅包含上傳文件的名稱。如果你想使用move_uploaded_file你可以參考使用臨時文件移動前檢查文件:

+1

替換'R-intro.pdf'。謝謝 – user782104

1

如果您使用fread讀取文件,則需要具有所有文件頭類型定義的字典。如果你想使用file shell命令

$out = exec("file 'R-intro.pdf' | cut -d: -f2 | cut -d, -f1"); 
if (trim($out) == "PDF document") { 
    echo "1"; 
} 

要在如何與上傳文件替換常量文件名請參考下面進一步擴大。

$out = exec("file '" . $_FILES['file']['tmp_name'] . "' | cut -d: -f2 | cut -d, -f1"); 
+0

感謝您的回答。因爲我正在檢查上傳文件,它應該是一個臨時文件($ _FILES [「file」] [「name」] [$ i]),我怎樣才能使用shell腳本檢查它? – user782104

+0

這不是shell腳本,這是使用shell命令的php腳本,您需要用正確的tmp文件名 – DevZer0

5

閱讀前4個字節的文件,並檢查它們匹配%PDF。針對%PDF

+0

這是很棒的解決方案。工作得很好。 – jasper

+0

當你說檢查你的意思是in_array($ header,「%PDF」); ?不知道如何用% – 2016-08-09 20:50:15

相關問題