在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。
答案 0 :(得分:3)
使用的“魔术”文件与Apache无关。它用作table of file signatures,并且取决于您的系统,或者是在PHP的目录中以PHP(magic
或magic.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将返回它将要返回的内容。如果您认为某个文件扩展名需要特定类型,请将其返回。