2009-10-04 6 views
10

De la même manière qu'il est possible de servir des images avec php, pour une utilisation dans CAPTACHAS et autres, est-il possible de faire de même avec les fichiers audio?Puis-je servir des fichiers MP3 avec PHP?

J'ai essayé ce

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

J'utilise Safari, qui peut lire des fichiers MP3. Cela donne à Safari le bon mode, j'obtiens les commandes Quicktime pendant quelques secondes, puis "No Video". J'essaie de protéger les fichiers contre le téléchargement non autorisé au cas où vous vous demandez pourquoi je voudrais faire cela.

+0

Vous devriez être en mesure de - ne sais pas pourquoi cela ne fonctionne pas, mais vous êtes sur la bonne voie. Essayez wget/curl à partir de la ligne de commande sur l'URL à partir de laquelle vous accédez au fichier et vérifiez qu'il fonctionne comme prévu. –

Répondre

14

Votre Content-Disposition devrait être:

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

Je ne sais pas si c'est le problème cependant. Je recommande également d'utiliser readfile à la sortie du fichier:

readfile($rSong); 

En outre, il ne peut pas nuire à utiliser un en-tête Content-Type exhaustive, et le contenu mis Transfer-Encoding:

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

ces en-têtes supplémentaires ont fait toute la différence! Merci. Bien que j'ai supprimé "pièce jointe" pour l'instant puisque je veux jouer les pistes dans le navigateur, mais je vais devoir l'utiliser plus tard lorsque les gens téléchargent des pistes. Bon conseil, merci. – gargantuan

+0

Notez que 'XSendfile' (sur Apacha et nginx otoh) peut sérieusement réduire la charge sur le serveur/php, et toujours utiliser des documents en dehors de la racine du document. – Wrikken

1

essayez d'utiliser This Class il prend en charge le téléchargement CV et la limite de vitesse croyez-moi, vous en avez besoin en tant que propriétaire de téléchargements mp3 site

Questions connexes