Seite 1 von 1

PHP: MP3-Download erzwingen - nicht im Browser abspielen

Verfasst: 25.06.2011 22:19
von _____
Hi!

Ich nutze PHPBB 3.0.8

Wir sind ein paar Dutzend Musiker und haben ein internes Forum und wir bieten uns hin und wieder unsere selbst produzierten Songs als MP3 zum Download an. Dafür habe ich neuerdings einen Download-Button als BBCode eingerichtet, weil ich einen Button schöner finden, als nur einen Text-Link mit dem Vermerk (Download: Rechtsklick -> Ziel speichern unter...). Nun wird beim Klick auf den Download-Button aber bei meinem Browser (und bei fast allen anderen auch) die MP3 im Browser mit QuickTime abgespielt, weil es halt im Browser so eingestellt ist. Ich möchte nun den Download der MP3's, die alle im selben Ordner auf unserem Server sind, erzwingen - per PHP soll das ja machbar sein.

Habe das hier gefunden:

Code: Alles auswählen

<? 
$datei = "download_verzeichnis/download_datei.abc";
$dateiname = basename($datei);
$groesse = filesize($datei);
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=".$dateiname);
header("Content-Length:".$groesse);
readfile($datei);
?>
Wie bekomme ich es hin, dass alle Dateien mit der Endung MP3 aus diesem Verzeichnis beim User als erzwungenen Download zu behandeln? Ich weiß auch nicht, welche Datei ich ändern muss.

Hoffe, Ihr könnt mir helfen.

Re: PHP: MP3-Download erzwingen - nicht im Browser abspielen

Verfasst: 25.06.2011 22:23
von Elsensee
Hiermit könnte dir geholfen sein. (Damit meine ich, du solltest dir mal "Content-Type" ansehen :wink: )

Re: PHP: MP3-Download erzwingen - nicht im Browser abspielen

Verfasst: 25.06.2011 22:33
von _____
Okay, habe jetzt zwei Sachen verändert. Zum einen:

Code: Alles auswählen

$datei = "download_verzeichnis/*.mp3
- kann man das so machen?

Und dann noch das hier:

Code: Alles auswählen

header("Content-Type: audio/mpeg");

Code: Alles auswählen

<?
$datei = "download_verzeichnis/*.mp3";
$dateiname = basename($datei);
$groesse = filesize($datei);
header("Content-Type: audio/mpeg");
header("Content-Disposition: attachment; filename=".$dateiname);
header("Content-Length:".$groesse);
readfile($datei);
?>
Bei Content-Disposition bin ich mir noch nicht sicher, was da rein muss. Und wo der Code rein kommt, ist mir auch noch nicht klar. :)

Re: PHP: MP3-Download erzwingen - nicht im Browser abspielen

Verfasst: 25.06.2011 22:35
von Elsensee
_____ hat geschrieben:Okay, habe jetzt zwei Sachen verändert. Zum einen:

Code: Alles auswählen

$datei = "download_verzeichnis/*.mp3
- kann man das so machen?
[...]
Ganz klares Nein! Der Browser kann damit nichts anfangen - der Pfad zur Datei muss da sein. :wink:

Re: PHP: MP3-Download erzwingen - nicht im Browser abspielen

Verfasst: 25.06.2011 22:53
von _____
Das heißt, ich muss alle MP3's einzelnd irgendwo in eine PHP-Datei schreiben? Das kann ja nicht sein, oder? Man muss doch sicher die Möglichkeit haben, dass alle Dateien aus Verzeichnis XY gleich behandelt werden?! Sonst ist das ja keine Lösung. Ich kann ja nicht jedes Mal, wenn jemand was hochladen will, den Dateinamen in PHP hinzufügen.

Re: PHP: MP3-Download erzwingen - nicht im Browser abspielen

Verfasst: 26.06.2011 00:15
von Charlie_M
Du könntest den hinteren Teil (also mp3) abtrennen und mittels Switch (IF ...) entsprechend abarbeiten.

Re: PHP: MP3-Download erzwingen - nicht im Browser abspielen

Verfasst: 26.06.2011 00:47
von _____
Habe es geschafft. Trotzdem Danke!

Habe eine .htaccess in den Ordner mit den MP3's abgelegt. In die .htaccess habe ich folgenden Code hinein geschrieben:

Code: Alles auswählen

AddType application/octet-stream .mp3
Wenn ich nun auf den Download-Button klicke, fragt mich Firefox, wo ich die Datei abspeichern möchte. Dank geht raus an Kugelfisch23 aus dem gulli:board. Seine hilfreiche Antwort und seine Meinung zur PHP-Lösung findet Ihr hier.

Re: PHP: MP3-Download erzwingen - nicht im Browser abspielen

Verfasst: 30.06.2011 21:36
von _____
Damit die MP3's im Internet Explorer ebenfalls heruntergeladen werden können, ohne dass der IE sie direkt im Browser abspielt, muss man der htaccess noch folgendes hinzufügen:

Code: Alles auswählen

Header set Content-Disposition attachment