У меня есть веб-сайт, который позволяет пользователям воспроизводить MP3, но я хочу знать, сколько раз воспроизводится каждый файл. Я попытался найти, чтобы увидеть, как вывести MP3 с PHP, и я подумал, что вы можете сделать это с помощью вызова header('Content-Type')
но я не могу найти документацию по этому вопросу.
Допустим, у меня есть файл, /music/song.mp3
, и у меня есть код взаимодействия с БД, и в браузер не было отправлено никакого вывода, какие заголовки мне нужно было бы передать, чтобы разрешить вывод MP3 после завершения взаимодействия с БД?
Обновить:
Вот то, что я сейчас использую, и страница загружает mp3 с правильным именем файла, но оно повреждено и не воспроизводится. Есть идеи, почему это так?
$track = $_GET['t'];
header('Content-type: audio/mpeg');
header('Content-length: ' . filesize($_SERVER['DOCUMENT_ROOT'].'music/'.$track.'.mp3'));
header('Content-Disposition: attachment; filename="'.$track.'.mp3"');
header("Content-Transfer-Encoding: binary");
header("Content-Type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3");
Вот ссылка, где вы можете проверить mp3:
http://shacktown.com/engine/api/mp3/?t=giftofmelody
Ваш header
должен выглядеть примерно так:
$file = "/some/folder/your.mp3";
header('Content-type: audio/mpeg');
header('Content-length: ' . filesize($file));
header('Content-Disposition: attachment; filename="your.mp3"');
header("Content-Transfer-Encoding: binary");
header("Content-Type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3");
readfile($file);
В итоге я просто записал информацию в БД и затем перешел в исходный файл. Я попробовал ваш обновленный пример, но просто не могу правильно прочитать файл. На случай, если кому-то будет интересно, это код, который я сейчас использую, и функционально он работает как нужно.
$trackPath = $_SERVER['DOCUMENT_ROOT'].'music/'.$track.'.mp3';
if ( !file_exists($trackPath) )
die('no!');
$trackInfo = $db->Fetch('tracks', 'plays', 'src="'.$track.'"');
$update = $db->Update('tracks', array('plays'=>$trackInfo['plays']+1), 'src="'.$track.'"');
header('Location: http://shacktown.com/music/'.$track.'.mp3');
$ db — это сокращенное обозначение объекта БД, которое я создал для удобства запросов, но я думаю, что это довольно очевидно.