gpt4 book ai didi

php - 为什么 mime_content_type 上的一些 mp3 返回 application/octet-stream

转载 作者:可可西里 更新时间:2023-11-01 12:50:19 26 4
gpt4 key购买 nike

为什么在某些 mp3 文件上,当我调用 mime_content_type($mp3_file_path) 时它返回 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");
}
}

编辑:我在这里找到了一个不错的类(class):

http://www.zedwood.com/article/127/php-calculate-duration-of-mp3

最佳答案

MP3 文件在识别它们时是一个奇怪的野兽。您可以使用 .wav 容器存储 MP3。文件开头可以有一个 ID3v2 header 。您基本上可以在任何文件中嵌入 MP3。

可靠检测它们的唯一方法是慢慢解析文件并尝试找到看起来像 MP3 帧的内容。帧是可能的有效 MP3 数据的最小单位,代表(离开内存)0.028 秒的音频。帧的大小根据比特率和采样率而变化,因此您不能只获取第一帧的比特率/采样率并假设所有其他帧的大小相同 - VBR mp3 必须完整解析计算总播放时间。

所有这一切都归结为使用 PHP 的文件信息等来识别 MP3 是不可靠的,因为实际的 MP3 数据可以在文件中的任何位置开始。 fileinfo 只查看数据的前一千字节,因此如果它说它不是 MP3,那很可能是在撒谎,因为数据开始的位置稍远一些。

关于php - 为什么 mime_content_type 上的一些 mp3 返回 application/octet-stream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2754713/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com