【发布时间】:2019-08-13 07:45:41
【问题描述】:
我知道 UNIX 命令 file 可以检测文件的 mime 类型,我可以通过 PHP 执行该命令(如 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。然后我将文件魔法添加到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 类型?
【问题讨论】: