PHP finfo将m4a音频检测为视频

时间:2012-09-04 22:18:01

标签: php

在2个不同的AMP服务器(一个Linux,一个Windows)上,PHP的finfo函数返回一个mime类型的" video / mp4"对于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文件来控制,但在找到" audio / mp4"并添加m4a扩展名:

audio/mp4                   mp4a m4a

并重新启动Apache,它仍会报告video / mp4。

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

TYIA。

2 个答案:

答案 0 :(得分:3)

使用的“魔术”文件与Apache无关。它用作table of file signatures,并且取决于您的系统,或者是在PHP的目录中以PHP(magicmagic.mime分发的“魔术”文件,大部分时间都是,或者系统的“魔术”文件(由Unix上的file command使用)。

你也可以要求使用这样的特定“魔术”文件:

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

您可以更改系统的“魔术”文件或制作自定义文件。

MPEG-4音频和视频的standard file signatures是:

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。

答案 1 :(得分:0)

这与Apache无关。

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