使用 fileinfo 获取 mime 类型,是大文件的好方法吗?
Posted
技术标签:
【中文标题】使用 fileinfo 获取 mime 类型,是大文件的好方法吗?【英文标题】:Get mime type with fileinfo, is the good method for big file? 【发布时间】:2014-02-20 00:37:07 【问题描述】:我会使用 fileinfo 来获取我的文件的 mime 类型,因为 mime_content_type 已被弃用。 但是我有一个问题,它是大文件的好方法吗?
如果我有一个 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);
?>
谢谢。
【问题讨论】:
【参考方案1】:我想 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"
所以成功了!
【讨论】:
很好的例子!谢谢! 在 PHP7 中,我观察到这种方法出现了一个奇怪的错误。整个文件的返回值:image/jpeg; charset=binary
,但是当使用你的方法并且只获取前 1024 个字节时,它返回application/octet-stream; charset=binary
。使用前 2048 或 4096 个字节时出现同样的错误
您使用哪个 PHP7 版本?我已经使用 PHP 版本 7.0.15-0ubuntu0.16.04.4 (Ubuntu Trusty) 进行了测试,它按预期工作:string(16) "video/x-matroska"
。你在测试哪个文件?以上是关于使用 fileinfo 获取 mime 类型,是大文件的好方法吗?的主要内容,如果未能解决你的问题,请参考以下文章