rob*_*tdd 7 php mp3 mime-types
当我调用mime_content_type($ mp3_file_path)时,为什么在某些mp3文件中它返回application/octet-stream?
我有这个:
if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$image = getimagesize($tempFile);
$mp3_mimes = array('audio/mpeg', 'audio/x-mpeg', 'audio/mp3', 'audio/x-mp3', 'audio/mpeg3', 'audio/x-mpeg3', 'audio/mpg', 'audio/x-mpg', 'audio/x-mpegaudio');
if (in_array(mime_content_type($tempFile), $mp3_mimes)) {
echo json_encode("mp3");
} elseif ($image['mime']=='image/jpeg') {
echo json_encode("jpg");
} else{
echo json_encode("error");
}
}
Run Code Online (Sandbox Code Playgroud)
编辑: 我在这里找到了一个很好的课程:
http://www.zedwood.com/article/127/php-calculate-duration-of-mp3
在识别它们时,MP3文件是一种奇怪的野兽.您可以使用.wav容器存储MP3.文件开头可以有一个ID3v2标头.您可以将MP3基本上嵌入任何文件中.
可靠地检测它们的唯一方法是通过文件缓慢解析并尝试找到看起来像MP3帧的东西.帧是有效MP3数据的最小单位,表示(关闭内存)0.028秒的音频.帧的大小根据比特率和采样率而变化,因此您不能只获取第一帧的比特率/采样率并假设所有其他帧的大小相同 - 必须完整地解析VBR mp3计算总的上场时间.
所有这些归结为使用PHP的fileinfo等识别MP3是不可靠的,因为实际的MP3数据可以在文件中随时启动.fileinfo只查看第一个千字节或两个数据,所以如果它说它不是MP3,它可能很好说谎,因为数据开始稍微远一些.
application/octet-streammime_content_type当它无法识别文件时,可能是后备类型。
在这种情况下,MP3 要么不是真正的 MP3 文件,或者 - 更有可能 - 该文件是真正的 MP3 文件,但不包含 PHP 函数用于识别格式的“魔术字节” - 可能是因为它是不同的子文件-格式或具有可变比特率或其他。
您可以尝试getid3是否能给您更好的结果。我从未使用过它,但它看起来像是一个非常健康的库,可以从多媒体文件中获取大量信息。
如果您有权访问 PHP 的配置,您也许还可以更改PHP 使用的mime.magic文件,尽管我不知道是否存在更好的文件能够检测您的 MP3。(该文件是包含用于识别某些文件类型的mime.magic所有字节序列的文件。)mime_content_type
| 归档时间: |
|
| 查看次数: |
7650 次 |
| 最近记录: |