La cosa migliore (avendo accesso al server web) sarebbe quella di far "uploadare" i file al di fuori della document_root in modo da non potere accedervi direttamente tramite browser.
Se non è il tuo caso metti un file .htaccess che protegga l'accesso ai file.
A questo punto (allo stesso modo per tutte e 2 le alternative), quando vuoi dare in lettura il file all'utente usi una procedura php, che richiama la funzione readfile, e da in output l'mp3.
Facendo in questo modo puoi mettere all'interno del tuo file php tutti i controlli che vuoi, richiedere ad esempio una variabile che contenga un codice di downlaod che può valere 1 o N volte ecc ecc.
Qui sotto ti posto il codice generico che uso per dare in output un file:
codice:
function readfileheader($nomefile) {
if($nomefile) {
header("Expires: Mon, 12 Jul 1976 06:20:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($nomefile).'"');
readfile($nomefile);
}
}
La riga in grossetto puoi migliorarla mettendo il mimetype dell'mp3.
ciao