2012-09-04 77 views
3

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

$path = '/path/to/some/audio.m4a'; 
$finfo = finfo_open(FILEINFO_MIME_TYPE);   
$mime = finfo_file($finfo, $path); 
print $mime; // video/mp4 

我相信这可以控制与Apache的mime.types文件,但找到了“音频/ MP4”的行并添加M4A后延:

audio/mp4     mp4a m4a 

和重启动Apache,它仍然报告视频/ mp4。

我如何获得finfo检测.m4a音频文件的正确(音频)mime类型?

TYIA。

回答

3

使用的“魔术”文件与Apache无关。它被用作table of file signatures,根据你的系统不同,它可能是一个用PHP发布的“魔术”文件(大部分时间在PHP的目录中为magicmagic.mime),或者是系统的“魔术”文件(由Unix上的file command使用)。

您也可以要求使用特定的“神奇”的文件是这样的:

<?php 
    $finfo = new finfo(FILEINFO_MIME, "/usr/share/misc/magic.mgc"); 
?> 

您可以更改系统的“魔力”的文件或让你自定义的。

standard file signatures为MPEG-4音频和视频:

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 

你可能想先检查,如果这些是你的“神奇”的文件。我记得,m4a(音频)和m4v(视频)可能具有相同的mp4签名(由于编码器不好),所以你不能总是使用“魔术”文件区分另一个。然后,您可以根据文件扩展名(如Windows)确定一些PHP代码,以确定它是否是视频或音频mp4。

+0

谢谢。所以在这种情况下,你会建议我编辑现有的魔法文件,还是使用其他方法? – momo

+0

@BigMoMo我会做一个副本,并使用我上面添加的说明进行检查。详细信息,请致电 – tricasse

+0

+1 – momo

0

这与Apache无关。

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