2014-09-12 47 views
2

我有一個PHP腳本,用於上傳文件並返回給定文件的MIME類型。這對於小文件格式非常有效,但是當我開始使用大文件(100MB +)時,響應迅速降低。在PHP中獲取大文件的MIME類型

有沒有辦法快速檢索給定文件的MIME類型而無需將其加載到內存中或讀取整個文件?據我所知,mimetype存儲在文件的前幾個字節中,所以我不需要處理整個資源,對不對?我試過以下內容:

finfo_open(FILEINFO_MIME_TYPE) -> crashes on files over 60mb 

file -bi -> Delay directly relates to size of file. Slow (10+ seconds) 

xdg-mime query filetype your_file -> Slow. As above 

我找不到任何其他可以幫助的PHP腳本/模塊。我確信我並不是唯一一個經歷過這件事的人,但我的Google-fu似乎缺乏,因爲我根本找不到任何解決方案。

我正在使用Oracle Linux框,與我的生產設置相同。

謝謝!

編輯:我的文件還沒有文件擴展名,它們被存儲有唯一的ID很像

eed78421-7184-46f3-9c68-73315c47e3c8 
+1

http://stackoverflow.com/questions/134833/how-do-i-find-the-mime-type-of-a-file-with-php http://stackoverflow.com/問題/ 21906596/find-mime-type-of-file-or-url-using-php-for-all-file-format – Sarang 2014-09-12 11:01:35

+0

@Sarang謝謝你,但我已經嘗試了主要問題中列出的那些方法,並且我的文件沒有擴展名。我會用這個事實來修改這個問題。 – chandler3224 2014-09-12 11:03:18

回答

1

如果您不能依賴於文件擴展名和要避免加載整個文件,你正在尋找的是文件簽名或幻數以及從哪裏得到它們。維基百科有一個不完整列表,它從幻數映射到文件擴展名(從中可以映射到MIME類型)。

https://en.wikipedia.org/wiki/List_of_file_signatures

然後你需要使用有限http://php.net/manual/en/function.fread.php閱讀一些字節並檢查幻數(你可能想只能看幾個特定的​​)來實現的東西。

+0

剛剛找到另一個網站,主持更全面的列表:http://www.garykessler.net/library/file_sigs.html – 2015-07-03 18:29:19