在PHP中获取大文件的MIME类型

3

我有一个上传文件并返回给定文件的MIME类型的PHP脚本。这对于小文件大小非常有效,但是一旦我开始使用相对较大的文件(100mb+),响应速度就会迅速下降。

是否有一种快速检索给定文件的MIME类型的方法,而无需将其加载到内存中或读取整个文件?据我所知,MIME类型存储在文件的前几个字节中,因此我不需要处理整个资源,对吗?我尝试了以下方法:

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盒子工作,与我的生产环境设置相同。

谢谢!

编辑:我的文件也没有文件扩展名,它们使用类似于唯一标识符的存储。

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

1
https://dev59.com/ZHVC5IYBdhLWcg3w9GLMhttps://dev59.com/5Xzaa4cB1Zd3GeqPTrlv - Sarang
@Sarang 谢谢你,但我已经尝试过那些方法,正如主要问题中所列出的那样,我的文件没有扩展名。我将在问题中加入这个事实。 - chandler3224
1个回答

2
如果您不能依赖文件扩展名,并且想避免加载整个文件,那么您需要寻找文件签名或魔数以及它们的获取方式。维基百科有一个不完整的列表,将魔数映射到文件扩展名(从中您可以映射到 MIME 类型)。

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

那么您需要使用有限的 http://php.net/manual/en/function.fread.php 实现一些东西,以读取一些字节并检查魔数(您可能只想查找几个特定的魔数)。

1
刚刚发现另一个网站,它提供了更全面的列表:http://www.garykessler.net/library/file_sigs.html - Josep Valls

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接