4

2 つの異なる AMP サーバー (1 つは Linux、もう 1 つは Windows) で、PHP の finfo 関数は、m4a オーディオ ファイルに対して "video/mp4" の MIME タイプを返します。

$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 とともに配布される「マジック」ファイル (magicまたはmagic.mimeほとんどの場合 PHP のディレクトリ内) またはシステムの「マジック」ファイル (fileコマンドで使用される) のいずれかです。ユニックス)。

次のような特定の「マジック」ファイルを使用するように依頼することもできます。

<?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 のように) に基づいて、それがビデオまたはオーディオ mp4 であるかどうかを判断するために、いくつかの PHP コードを配置することができます。

于 2012-09-04T22:22:25.430 に答える
0

これはApacheとは関係ありません。

ファイルはローカルです。finfo は、返そうとしているものを返します。ファイル拡張子に特定のタイプが必要だと思われる場合は、そのまま返却してください。

于 2012-09-04T22:20:28.603 に答える