J'ai un site avec des fichiers audio dans une base de données mySQL, qui sont tous disponibles pour la lecture. Cela fonctionne très bien en utilisant les en-têtes:Récupérer mp3 à partir de mySQL et forcer le téléchargement au lieu de la lecture dans le navigateur
header("Content-length:". $audioLength);
header("Content-type: ". $audioMime);
echo $audio;
Lorsque le audioLength $ et audioMime $ sont stockés avec le fichier dans la base de données et audio $ sont les données réelles. Je veux maintenant ajouter des liens de téléchargement pour certains des fichiers plus volumineux, il serait donc très évident pour les utilisateurs qui ne savent pas comment télécharger un mp3 à partir d'une page qu'ils sont invités à le faire et mettre la musique sur leurs appareils et les partager de toute autre manière qu'ils aiment. Mon PHP est le même sauf que je remplacé les en-têtes avec:
header("Content-type: attachment/octet-stream");
header("Content-disposition: attachment; filename=" . $fileName);
echo $audio;
Cela provoque encore Safari et Firefox pour jouer l'audio, mais uniquement dans une nouvelle fenêtre. Comment forcer une boîte de dialogue de téléchargement? Je suppose que la plupart des autres navigateurs là-bas serait jouer le fichier aussi bien, donc je ne l'ai pas testé les ... encore
M
OK - Je suis un idiot !!! dynamitage J'ai créé le fichier PHP qui serait téléchargé au lieu de lire à partir du fichier qui joue. Et j'ai oublié de modifier la référence au nouveau fichier PHP dans l'URL des fichiers que je récupérais. Brillant. Je l'ai eu le premier essai, il ne fonctionnait tout simplement pas parce que j'appelais le faux fichier.
Ainsi, pour toutes les personnes là-bas avec cette question - c'est ce qui fonctionne:
header('Content-Type: '.$audioMime);
header("Content-disposition: attachment; filename=" . $fileName);
echo $audio;
Ta-da! Allez-y, riez-moi et donnez-moi l'insigne du jour idiot. Je le mérite.
M
Donc, maintenant il ressemble à ceci: header ('Content-Type: application/octet-stream'); header ("Content-disposition: pièce jointe; nomfichier =". $ NomFichier); header ("Cache-Control: doit-revalider, post-vérifier = 0, pré-vérifier = 0"); echo $ audio; et joue encore au lieu de télécharger ... –
Le contrôle du cache ne devrait avoir aucun effet (lors de tests de ce type, bien sûr, vous devriez effacer le cache avant de réessayer) –