In the same way that it's possible to serve up images with php, for use in CAPTACHAS and such, is it possible to do the same with audio files?

I've tried this

<?php

$track = "sometrack.mp3";

if(file_exists($track))
{
header('Content-type: audio/mpeg');
header('Content-length: ' . filesize($track));
header('Content-Disposition: filename="sometrack.mp3"');
header('X-Pad: avoid browser bug');
Header('Cache-Control: no-cache');

print file_get_contents($track);
}else{
    echo "no file";
}

I'm using Safari, which can play MP3 files. It's kicking Safari into the right mode, I get the Quicktime controls for a few seconds, and then "No Video".

I'm trying to protect files from unauthorized download in case you're wondering why I'd want to do this.

Comments

You should be able to - not sure why that doesn't work, but you are on the right lines. Try wget/curl from the command line on the url you access the file from and check that it's working as expected.

Written by Rich Bradshaw

Accepted Answer

Your Content-Disposition should be:

header('Content-Disposition: attachment; filename="sometrack.mp3"');

Not sure if that's the problem though. I would also recommend using readfile to output the file:

readfile($rSong);

Also, it can't hurt to use an exhaustive Content-Type header, and set the Content-Transfer-Encoding:

header("Content-Transfer-Encoding: binary"); 
header("Content-Type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3");
Written by karim79
This page was build to provide you fast access to the question and the direct accepted answer.
The content is written by members of the stackoverflow.com community.
It is licensed under cc-wiki