4

在 2 台不同的 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,它仍然报告 video/mp4。

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

蒂亚。

4

2 回答 2

4

使用的“魔法”文件与 Apache 无关。它用作文件签名表,根据您的系统,它可以是随 PHP 分发的“魔术”文件(magicmagic.mime在 PHP 的目录中,大多数情况下),或者是系统的“魔术”文件file由Unix)。

您还可以要求使用特定的“魔术”文件,如下所示:

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

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

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。

于 2012-09-04T22:22:25.430 回答
0

这与 Apache 无关。

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

于 2012-09-04T22:20:28.603 回答