在PHP中获取大文件的mimetype

时间:2014-09-12 10:57:35

标签: php linux filesystems mime-types

我有一个PHP脚本,可以上传文件并返回给定文件的mimetype。这对于小文件大小非常有效,但是当我开始使用大型文件(100mb +)时,响应会迅速降低。

有没有办法快速检索给定文件的mimetype而不将其加载到内存或读取整个文件?据我所知,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脚本/模块。我确信我不是唯一一个经历过这种情况的人,但我的谷歌似乎缺乏,因为我根本无法找到任何解决方案。

我正在使用Oracle Linux机器,与我的生产设置相同。

谢谢!

编辑:我的文件也没有文件扩展名,它们存储的唯一ID就像

一样
eed78421-7184-46f3-9c68-73315c47e3c8

1 个答案:

答案 0 :(得分:1)

如果您不能依赖文件扩展名并且您想避免加载整个文件,那么您要查找的是文件签名或幻数以及获取它们的位置。维基百科有一个不完整列表,它从魔术数字映射到文件扩展名(您可以从中映射到mime类型)。

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

然后你需要使用有限的http://php.net/manual/en/function.fread.php来实现一些东西来读取一些字节并检查幻数(你可能只想查找一些特定的数字)。