2011-06-16 23 views
2

我打算使用這個系統程序/ usr/bin/file來確定上傳的文件內容的類型,然後採取相應的行動。使用/ usr/bin/file來確定文件類型?

這是一個好主意,還是我應該注意的事情? (或者使用完全不同的東西)

+0

需要更多背景...標籤「文件上傳」意味着你處理上傳文件,在這種情況下文件類型應該在請求中? – chrisdowney 2011-06-16 10:40:52

回答

2

PHP有fileinfo擴展名,它使用了相同的機制,但是原生的PHP。

3

mime_content_typefinfo_file是確定MIME類型的首選方法(在大多數PHP發行版中都經常啓用)。他們使用與外部工具相同的magic.mime數據庫,這就是爲什麼我只將它用作回退的原因。

使用外部工具也需要提取輸出的MIME類型,所以它有些涉及代碼:

$type = exec("/usr/bin/file -iL " .escapeshellcmd($fn). " 2>/dev/null"); 
if ($type = trim(strtok(substr(strrchr($type, ":"), 1), ";"))) { 
    return $type; 
} 

如果你的問題是關於可靠性:是的,這是一個不錯的辦法。在所有當前的Linux/U * ix服務器上,通過魔術字節確定文件類型是相當可靠的。

1

如果您可以使用PECL擴展(或使用php> = 5.3),我會建議您使用Fileinfo擴展名。

如果沒有,mime_content_type()功能會做,但請注意,這是現在已經過時(贊成或FileInfo的)

+1

從PHP 5.3起,只是一個小小的提醒,Fileinfo默認包含在內。 – 2011-06-16 10:43:18

+0

謝謝,編輯我的答案。現在我只希望一些遺留代碼可能在一夜之間消失,所以我可以使用5.3 ... – Lepidosteus 2011-06-16 15:21:57