2014-01-28 5 views
2

mime_content_type이 사용되지 않으므로 fileinfo를 사용하여 파일의 mime 형식을 가져옵니다. 하지만 큰 파일에는 좋은 방법입니까?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 정보를 가져 오는 것으로 가정하므로 파일의 첫 번째 바이트 만 제공하면 제대로 작동합니다. 나는 3기가바이트 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; charset = binary'''이다. 첫 번째 2048 또는 4096 바이트를 사용할 때 같은 오류가 발생했습니다 – Christian

+0

어떤 PHP7 버전을 사용합니까? 필자는 PHP 버전 7.0.15-0ubuntu0.16.04.4 (Ubuntu Trusty)를 테스트했으며 예상대로 작동합니다 :'string (16) "video/x-matroska"'. 어떤 파일을 테스트하고 있습니까? – DaryL