我知道UNIX命令file
用于检测文件的mime类型,我可以通过PHP执行该文件的mime类型(例如here):
$content_type = exec("file -bi " . escapeshellarg($filepath));
我也知道
$fi = new finfo();
echo $fi->file($filename, FILEINFO_MIME_TYPE) . PHP_EOL;
和
echo mime_content_type($filename) . PHP_EOL;
两个PHP内置解决方案均产生相同的输出。但是,Linux file
命令对某些格式有更多了解。
使用所有三种方法将AMR音频文件报告为application/octet-stream
。然后,我将文件magic添加到了file
命令的数据库中:
$ cat /etc/magic
0 string #!AMR\n Adaptive Multi-Rate Audio Codec
!:mime audio/amr
$ file -bi test115.amr
audio/amr; charset=binary
但是,PHP仍然报告application/octet-stream
。
我认为PHP-builtin和file
使用某种数据库。如何训练PHP知道AMR文件的MIME类型?
答案 0 :(得分:1)
PHP似乎使用自己的捆绑数据库进行fileinfo查找;您可以通过将第二个参数添加到new finfo
调用中,或通过设置MAGIC
env var来覆盖此行为。
从文档中
注意: 通常,除非您特别需要自定义的魔术数据库,否则最好使用捆绑的魔术数据库(通过未设置magic_file和MAGIC环境变量设置)。