2014-01-28 61 views
2

我會使用fileinfo獲取我的文件的MIME類型,因爲mime_content_type已棄用。 但是我有個問題,對大文件來說是不是好方法?用fileinfo獲取MIME類型,是大文件的好方法嗎?

如果我有一個1.5GB的文件,我不想在內存中「打開」此文件只得到MIME類型...

<?php 
$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension 
foreach (glob("*") as $filename) { 
    echo finfo_file($finfo, $filename) . "\n"; 
} 
finfo_close($finfo); 
?> 

感謝。

回答

5

我想finfo從文件頭獲取MIME信息,所以如果你只提供非常少的文件的第一個字節它就可以工作。我有一個3GB MKV文件測試此:

<?php 
$finfo = new finfo(FILEINFO_MIME); 
var_dump(
    $finfo->buffer(
     file_get_contents('My movie.mkv', false, null, -1, 1024), 
     FILEINFO_MIME_TYPE 
    ) 
); 

它返回:

string(16) "video/x-matroska" 

所以它的工作!

+0

很好的例子!謝謝! –

+0

在PHP7中,我觀察到了這種方法的一個奇怪的錯誤。 返回整個文件的值:'''image/jpeg; charset = binary''',但是當使用你的方法時,只能得到前1024個字節,它會返回application/octet-stream;字符集= binary'''。使用第一個2048或4096字節時出現同樣的錯誤 – Christian

+0

您使用哪個PHP7版本?我已經使用PHP 7.0.15-0ubuntu0.16.04.4(Ubuntu Trusty)進行了測試,它的工作原理如下:'string(16)「video/x-matroska」'。 你正在測試哪個文件? – DaryL