2009-10-04 14 views
10

De la misma manera que es posible servir imágenes con php, para usar en CAPTACHAS y tal, ¿es posible hacer lo mismo con los archivos de audio?¿Puedo servir archivos MP3 con PHP?

He intentado esto

<?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"; 
} 

estoy usando Safari, que puede reproducir archivos MP3. Está pateando a Safari en el modo correcto, obtengo los controles de Quicktime por unos segundos y luego "No Video".

Estoy tratando de proteger los archivos de descargas no autorizadas en caso de que se pregunte por qué me gustaría hacer esto.

+0

Debería poder - no estoy seguro de por qué eso no funciona, pero está en la línea correcta. Pruebe wget/curl desde la línea de comando en la url desde la que accede al archivo y verifique que esté funcionando como se esperaba. –

Respuesta

14

Su Contenido-Disposición debe ser:

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

No estoy seguro si ese es el problema, sin embargo. También recomendaría el uso de readfile a la salida del archivo:

readfile($rSong); 

Además, no hace daño a usar un exhaustivo cabecera Content-Type, y establecer el Content-Transfer-Encoding:

header("Content-Transfer-Encoding: binary"); 
header("Content-Type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3"); 
+1

¡esos encabezados adicionales hicieron toda la diferencia! Gracias. Aunque eliminé el "archivo adjunto" por el momento, ya que quiero reproducir las pistas en el navegador, pero tendré que usarlo más adelante cuando las personas descarguen pistas. Un gran consejo, gracias. – gargantuan

+0

Tenga en cuenta que 'XSendfile' (en Apacha y nginx otoh) puede reducir seriamente la carga en el servidor/php, y aún así usar documentos fuera de la raíz del documento. – Wrikken

1

intente usar This Class soporta reanudar la descarga y límite de velocidad creeme u lo necesita como propietario del sitio web de descargas mp3