PHP finfo将m4a音频检测为视频

PHP finfo将m4a音频检测为视频,php,Php,在两个不同的AMP服务器(一个Linux,一个Windows)上,PHP的finfo函数为m4a音频文件返回mime类型的“video/mp4” $path = '/path/to/some/audio.m4a'; $finfo = finfo_open(FILEINFO_MIME_TYPE); $mime = finfo_file($finfo, $path); print $mime; // video/mp4 我相信这可以通过Apache的mime.types文件来控制

在两个不同的AMP服务器(一个Linux,一个Windows)上,PHP的finfo函数为m4a音频文件返回mime类型的“video/mp4”

$path = '/path/to/some/audio.m4a';
$finfo = finfo_open(FILEINFO_MIME_TYPE);        
$mime = finfo_file($finfo, $path);
print $mime;  // video/mp4
我相信这可以通过Apache的mime.types文件来控制,但是在找到“audio/mp4”的行并添加m4a扩展名之后:

audio/mp4                   mp4a m4a
重新启动Apache时,它仍然报告视频/mp4

如何让finfo检测.m4a音频文件的正确(音频)mime类型


TYIA.

这与Apache无关

该文件是本地的。finfo将返回它将返回的内容。如果您认为需要文件扩展名的特定类型,只需返回它。

使用的“魔法”文件与Apache无关。根据您的系统,它可以是一个随PHP分发的“magic”文件(大多数情况下,PHP目录中的
magic
magic.mime
),也可以是系统的“magic”文件(Unix上的用户使用)

您还可以要求使用以下特定的“魔法”文件:

<?php 
  $finfo = new finfo(FILEINFO_MIME, "/usr/share/misc/magic.mgc");
?>
您可能需要首先检查这些文件是否在“magic”文件中


根据我的记忆,m4a(音频)和m4v(视频)可能具有相同的mp4签名(由于编码器不好),因此您不能总是使用“magic”文件区分其中一个。然后,您可以根据文件扩展名(像Windows一样)输入一些PHP代码来确定它是视频mp4还是音频mp4。

谢谢。因此,在这种情况下,您建议我编辑现有的魔法文件,还是使用另一种方法?@bigmoo我会复制一份,并使用上面添加的说明进行检查。
00 00 00 18 66 74 79 70
33 67 70 35     ....ftyp
3gp5
MP4     MPEG-4 video files

00 00 00 18 66 74 79 70
6D 70 34 32     ... ftyp
mp42
M4V     MPEG-4 video/QuickTime file

00 00 00 20 66 74 79 70
4D 34 41 20     ... ftyp
M4A
M4A     Apple Lossless Audio Codec file