我打算使用這個系統程序/ usr/bin/file來確定上傳的文件內容的類型,然後採取相應的行動。使用/ usr/bin/file來確定文件類型?
這是一個好主意,還是我應該注意的事情? (或者使用完全不同的東西)
我打算使用這個系統程序/ usr/bin/file來確定上傳的文件內容的類型,然後採取相應的行動。使用/ usr/bin/file來確定文件類型?
這是一個好主意,還是我應該注意的事情? (或者使用完全不同的東西)
PHP有fileinfo擴展名,它使用了相同的機制,但是原生的PHP。
mime_content_type
和finfo_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服務器上,通過魔術字節確定文件類型是相當可靠的。
如果您可以使用PECL擴展(或使用php> = 5.3),我會建議您使用Fileinfo擴展名。
如果沒有,mime_content_type()功能會做,但請注意,這是現在已經過時(贊成或FileInfo的)
從PHP 5.3起,只是一個小小的提醒,Fileinfo默認包含在內。 – 2011-06-16 10:43:18
謝謝,編輯我的答案。現在我只希望一些遺留代碼可能在一夜之間消失,所以我可以使用5.3 ... – Lepidosteus 2011-06-16 15:21:57
需要更多背景...標籤「文件上傳」意味着你處理上傳文件,在這種情況下文件類型應該在請求中? – chrisdowney 2011-06-16 10:40:52