PHP Curl mp3下载重置元数据
我有一个网站,在那里下载的mp3是做,当我下载它通过php(卷曲)的歌曲下载,但元数据的歌曲,如专辑艺术,艺术家姓名等丢失 在服务器上,该文件包含所有数据,但在下载时,所有数据都会丢失。 这是我的密码:PHP Curl mp3下载重置元数据,php,curl,download,mp3,Php,Curl,Download,Mp3,我有一个网站,在那里下载的mp3是做,当我下载它通过php(卷曲)的歌曲下载,但元数据的歌曲,如专辑艺术,艺术家姓名等丢失 在服务器上,该文件包含所有数据,但在下载时,所有数据都会丢失。 这是我的密码: if (!empty($path) && $path != null) { $ch = curl_init($path); curl_setopt($ch, CURLOPT_RETURNTRA
if (!empty($path) && $path != null)
{
$ch = curl_init($path);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
$data = curl_exec($ch);
curl_close($ch);
if ($data === false)
{
echo 'CURL Failed';
exit;
}
if (preg_match('/Content-Length: (\d+)/', $data, $matches))
{
$contentLength = (int) $matches[1];
}
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false); // required for certain browsers
header('Content-Type: audio/mpeg');
header("Content-Disposition: attachment; filename=\"" . urlencode($song->title) . ".mp3\";");
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . $contentLength);
ob_clean();
flush();
echo $data;
exit;
}
您正在强制curl将hTTP响应头添加到mp3文件中,因此您将得到如下结果:
HTTP/1.1 ...
Content-type: audio/mpeg
Content-length: 12345
ID3v2.......
mp3 data here
由于ID3数据在发送数据的开头不正确,音频播放器无法找到它,因为它只看到HTTP头
如果您对这些标题所做的只是提取内容长度,那么为什么还要费心这么做呢?您可以在PHP中使用strlen()
来计算它。e、 g
$mp3data = file_get_contents('url to mp3 file');
$length = strlen($mp3data);
header("Content-length: $length");
echo $mp3data;
也可以重命名该文件吗?很酷,它起作用了。我刚刚添加了
标题(“内容处置:附件;文件名=\”.urlencode($song->title)。“.mp3\”;”代码>成功了,非常感谢,伙计