Download mittels PHP starten

Hallo!

Ihr kennt das sicher alle, man klickt auf einen Dowload-Link der auf ein PHP-Script zeigt, und eine sekunde später springt der Downloadmanager ihres vertrauens auf.

Meine Frage: Wie macht man so etwas?

Was muß das PHP-Script machen, dass wenn es aufgerufen wird, der Browser angewiesen wird eine Datei zu downloaden?

Besten Dank
mfg
Robert

Hi,

[…] Downloadmanager […]

btw: Ein Download ist das Herunterladen einer Ressource vom Netz auf den lokalen Rechner. Um diese Antwort zu lesen, mußtest Du sie downloaden. Was Du Dir wünschst, ist der „speichern unter“-Dialog.

Was muß das PHP-Script machen, dass wenn es aufgerufen wird,
der Browser angewiesen wird eine Datei zu

…speichern?

Es muß als HTTP-Header den Content-type: application/octet-stream sowie die zu speichernden Daten zurückliefern.

Cheatah

Automatischer Download mittels PHP starten
Hi Cheatah
Ich hab genau das gleiche Problem wie der Kollege. Cheatah, kannst Du den Befehl etwas genauer erläutern?

Bei mir muss eine PHP-Datei durchgearbeitet werden und nachher automatisch eine bestimmte Seite aufrufen:

Trick 1

">
lief leiter nicht. Im Head erwartet er wohl keinen PHP-Code.

Trick 2
HEADER(LOCATION „datei.htm“)
lief leider auch nicht, weil der Befehl erst am Ende der Datei ist.

Wer hat nen Tipp für den automatischen Aufruf einer Datei oder eben eines Downloads?
Gruss
Borsi

[…] Downloadmanager […]

btw: Ein Download ist das Herunterladen einer Ressource vom
Netz auf den lokalen Rechner. Um diese Antwort zu lesen,
mußtest Du sie downloaden. Was Du Dir wünschst, ist der
„speichern unter“-Dialog.

Jeder bessered Downloadmamager klinkt sich mittle sogenantem Hook in das System, und fängt best. Mausevents ab, die an den Browser gesendet werden, und entscheidet dann, ob er sie behandeln will, oder ob er die behandlung an den Browser abgeben soll. Sprich: speichern-dialog und downloadmanager ist praktisch das gleiche

Was muß das PHP-Script machen, dass wenn es aufgerufen wird,
der Browser angewiesen wird eine Datei zu

…speichern?

also sie herunter zu landen

Es muß als HTTP-Header den Content-type:
application/octet-stream sowie die zu speichernden Daten
zurückliefern.

Könntest du mir dafü vielleicht eine besipiel code geben

besten danke
mfg
Robert

hier machs einfach so:

$download sei der Bezeichner für die zu ladende Datei

Dieses Verzeichnis liegt außerhalb der Document_Root und

ist nicht per URL zuzugreifen.

$basedir = „/home/www/download“;

Übersetzung von Download-Bezeichner in Dateinamen.

$filelist = array(
„file1“ => „area1/datei1.zip“,
„file2“ => „area1/datei2.zip“,
„file3“ => „area2/datei1.zip“
);

Einbruchsversuch abfangen.

if ($filelist[$download] == „“)
die(„Datei $download nicht vorhanden.“);

Vertrauenswürdigen Dateinamen basteln.

$filename = sprintf("%s/%s", $basedir, $filelist[$download]);

Passenden Datentyp erzeugen.

header(„Content-Type: application/octet-stream“);

Passenden Dateinamen im Download-Requester vorgeben,

z.B. den Original-Dateinamen

$save_as_name = basename($filelist[$download]);
header(„Content-Disposition: attachment; filename=“".$save_as_name.""");

Datei ausgeben.

readfile($filename);

(beispiel von koehntopp.de)

Hi,

Jeder bessered Downloadmamager […]
speichern-dialog und downloadmanager ist praktisch das gleiche

ja. Was ich sagen wollte: Der Begriff „Download“ wird allzu oft mißverstanden.

Was muß das PHP-Script machen, dass wenn es aufgerufen wird,
der Browser angewiesen wird eine Datei zu

…speichern?

also sie herunter zu landen

Nein. Etwas herunterzuladen heißt nicht, es auch zu speichern. Du findest dieses Posting vielleicht in Deinem Browsercache; falls nicht, ist es ein perfektes Beispiel.

Es muß als HTTP-Header den Content-type:
application/octet-stream sowie die zu speichernden Daten
zurückliefern.

Könntest du mir dafü vielleicht eine besipiel code geben

Header(‚Content-type: application/octet-stream‘);

Anschließend Datei auslesen und wegprinten.

Cheatah

Hallo Gecko

Besten Dank für den Tipp!
Irgendwie hat es mit dem readfile aber dennoch nicht geklappt. Im Prinzip geht es nur darum, eine Seite automatisch zu laden. Also anstatt einen Link anzuklicken sollte das Programm selber die neue Datei aufrufen.

Gruss
Borsi

HILFE!!!

Bei mir klappt das Script nicht! So sieht es bei mir aus:

Ich habe ein Formular, das die Variable download an eine PHP-Seite mit eben diesem Script übergibt. Auch die Filelist hab ich bearbeitet. Trotzdem klappt der Download nicht.

Es wird nur versucht, die PHP-Seite selbst herunterzuladen. Was mache ich denn falsch?!

Viele Grüße und Danke im Voraus

Jérôme

$download sei der Bezeichner für die zu ladende Datei

Dieses Verzeichnis liegt außerhalb der Document_Root und

ist nicht per URL zuzugreifen.

$basedir = „/home/www/download“;

Übersetzung von Download-Bezeichner in Dateinamen.

$filelist = array(
„file1“ => „area1/datei1.zip“,
„file2“ => „area1/datei2.zip“,
„file3“ => „area2/datei1.zip“
);

Einbruchsversuch abfangen.

if ($filelist[$download] == „“)
die(„Datei $download nicht vorhanden.“);

Vertrauenswürdigen Dateinamen basteln.

$filename = sprintf("%s/%s", $basedir, $filelist[$download]);

Passenden Datentyp erzeugen.

header(„Content-Type: application/octet-stream“);

Passenden Dateinamen im Download-Requester vorgeben,

z.B. den Original-Dateinamen

$save_as_name = basename($filelist[$download]);
header(„Content-Disposition: attachment;
filename=“".$save_as_name.""");

Datei ausgeben.

readfile($filename);

(beispiel von koehntopp.de)

kann eigentlich nur sein, das du den dateinamen falsch zusammenbastelst … mach dir nen paar fehlerausgaben dahin und schau mal ob die pfade stimmen.

Jetzt scheint es zu klappen - nur will ich z.B. ein PDF-File öffnen, doch der Browser produziert nur wirre Zeichenketten auf dem Screen.

Kann das mit dem „readfile“ zusammenhängen?

Jetzt scheint es zu klappen - nur will ich z.B. ein PDF-File
öffnen, doch der Browser produziert nur wirre Zeichenketten
auf dem Screen.

Kann das mit dem „readfile“ zusammenhängen?

jepp, bei einem pdf musst du einen anderen header senden:
header(„Content-type: application/pdf“);

Vielen Dank! Das klappt! *froi*

Eine letzte Frage noch, dann will ich auch brav sein :o)

Weißt du, wo es irgendwo eine Übsersicht über alle Application-Types gibt?

Danke im Voraus

Jérôme

die dinger nennen sich mime-types und ne liste solltest du ueberall kriegen -> google hilft!

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]