2016-05-29 9 views
1

Also brauche ich ein wenig Hilfe hier. Ich habe eine Seite, die einige MP3s hostet. Wenn Benutzer auf die Download-URL klicken, verlinkt sie direkt auf eine Datei namens downloadmp3.php, die 2 Parameter in der URL beinhaltet ... die php-Datei ist unten enthalten, und sie soll den Benutzer zwingen, die mp3 zu speichern. (nicht im Browser oder irgendetwas spielen).PHP - Forcing einer MP3-Datei herunterladen

Das passiert nicht. Stattdessen scheint es so, als ob die Datei in ascii zum Browser SCHRIFTLICH ist. Es scheint, als wäre es die eigentliche mp3-Datei.

Hier ist meine downloadmp3.php Datei ... bitte, was ist falsch in diesem Code. Es funktioniert auf meinem lokalen LAMP (Bitnami Wampstack auf Windows) .... das heißt, in meiner lokalen Testumgebung, sendet es die Datei an meinen Browser, und ich kann es speichern. Wenn ich es auf den echten Server hochlade, schreibt es im Grunde die mp3-Datei aus.

Hier wird die Täter-Datei ist, downloadmp3.php ... Bitte nur Gastgeber mp3s

<?php 
include 'ngp.php'; 
$file = $_GET['songurl']; 
$songid = $_GET['songid']; 
increasedownloadcount($songid); 
if (file_exists($file)) { 
    header('Content-Description: File Transfer'); 
    header('Content-Type: audio/mpeg'); 
    header('Content-Disposition: attachment; filename=' . basename($file)); 
    header('Content-Transfer-Encoding: binary'); 
    header('Expires: 0'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($file)); 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    ob_clean(); 
    flush(); 
    readfile($file); 
    exit; 
} 
?> 

By the way, diese Seite helfen - kein anderes Audio- oder Dateiformat. Daher sollte dieses downloadmp3.php-Skript den Benutzer idealerweise fragen, wo er diese Datei speichern möchte.

Vielen Dank für Ihre Hilfe im Voraus.

+0

Sie diese unterschiedlichen Ergebnisse zu erzielen sind (erzwungenes Herunterladen von localhost und geschrieben von Server) im selben Browser? Wenn verschiedene Browser, was sie sind? – PetrHejda

+0

Ich arbeite sowohl in Chrome als auch in Firefox, und beide "spucken" die gleiche ausgelesene MP3-Datei aus. Bitte denken Sie daran, dass es mir die Datei auf meinem lokalen Rechner gibt. Es ist vom echten Web-Host, dass es die Ascii-Suppe gibt. – Hideyoshi

Antwort

0

ich denke, die filename in Anführungszeichen gesetzt werden sollte:

header('Content-Disposition: attachment; filename="' . basename($file) . '"'); 
+0

kein Vater, das hat nicht funktioniert. – Hideyoshi

0

Ändern Sie den Content-Type-Wert text/plain. Mit diesem Browser wird es nicht erkannt und wird die Datei nicht abspielen. Stattdessen wird die Datei auf dem Client-Rechner heruntergeladen.

+0

danke für den Vorschlag. Es hat aber nicht funktioniert. – Hideyoshi

+0

Verwenden Sie tatsächlich die URL für diese Datei existiert überprüfen oder ist es der Dateisystempfad. Das Ändern des Inhaltstyps in text/plain und das Verwenden des Pfads von MP3-Datei zu Dateisystempfad funktionierte gut für mich. Ich habe den Code ohne Änderung versucht, nur die Datei zu Dateisystem relativen Pfad übergeben – Aditya

+0

Ich glaube nicht, dass das Finden der Datei das Problem ist. Der Code funktioniert ordnungsgemäß auf meinem lokalen Server. Auf dem echten Web-Host findet es die Datei auch, nur dass sie es nicht als MP3-Datei zurückgibt, sondern als eine "ausgedruckte MP3-Datei in Textform". – Hideyoshi

0

Scheint, es gibt zu viele Header. Ich bin mir sicher, dass sie ETWAS tun ... aber dieser Code funktioniert.

Dieser Code funktioniert mit MP3-Dateien .... Downloads in eine Datei. Spielt ohne ein Problem.

if(isset($_GET['file'])){ 
    $file = $_GET['file']; 
    header('Content-type: audio/mpeg'); 
    header('Content-Disposition: attachment; filename=".$file.'"'); 
    readfile('path/to/your/'.$file); 
    exit(); 
} 

Sie können es mit Ajax-Aufruf zugreifen oder diese:
<a id="dl_link" href="download.php?file=<>file-you-wish-to-download<>" target="_blank">Download this file</a>
Hoffentlich ist das von Nutzen