2014-01-28 4 views
2

Я бы использовал fileinfo для получения типа mime моих файлов, потому что mime_content_type устарел. Но у меня есть вопрос, хороший метод для большого файла?Получить тип mime с fileinfo, является хорошим методом для большого файла?

Если у меня есть файл 1.5Gb, я не хочу, чтобы «открыть» этот файл в памяти только для получения типа мима ...

<?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

 Смежные вопросы

  • Нет связанных вопросов^_^