将MIME类型知识添加到PHP

时间:2019-03-22 10:29:55

标签: php mime

我知道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类型?

1 个答案:

答案 0 :(得分:1)

PHP似乎使用自己的捆绑数据库进行fileinfo查找;您可以通过将第二个参数添加到new finfo调用中,或通过设置MAGIC env var来覆盖此行为。

从文档中

  

注意:   通常,除非您特别需要自定义的魔术数据库,否则最好使用捆绑的魔术数据库(通过未设置magic_file和MAGIC环境变量设置)。

http://php.net/manual/en/function.finfo-open.php