我有一个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
答案 0 :(得分:1)
如果您不能依赖文件扩展名并且您想避免加载整个文件,那么您要查找的是文件签名或幻数以及获取它们的位置。维基百科有一个不完整列表,它从魔术数字映射到文件扩展名(您可以从中映射到mime类型)。
https://en.wikipedia.org/wiki/List_of_file_signatures
然后你需要使用有限的http://php.net/manual/en/function.fread.php来实现一些东西来读取一些字节并检查幻数(你可能只想查找一些特定的数字)。