Dateidownload
Tanka
- php
0 Julian Hofmann0 Tanka0 Julian Hofmann0 Tanka
Hallo!
Ich hab da mal ne Frage.
Ich beziehe mich dabei auf den Dateidownload von dieser Seite: http://www.dclp-faq.de/q/q-datei-download.html
Also folgendes:
Ich übergebe eine Datei mit dem namen testblablub.jpg und erhalte sie üebr $download = $_GET['bild'];. OK. Kein Problem!
$basedir ist bei mir "c:/apache/htdocs/" Auch kein Problem!
Jetzt hab ich aber die Datzei testblablub.jpg in dem Ordner Bilder/upload/ !! Wie komme ich da pber das Ding hier ran: $filelist = array(
"file1" =>???
Weiß jemand ne Antwort?Ich wäre euch sehr dankbar, da ich echt bald am Rad drehe. Vielen Dank schonmal im Voraus
Hallo.
Wenn ich das der Seite richtig entnehme, dann dient das Array lediglich dazu, keine Dateinamen im Klartext per URL zu übergeben. Du übergibst also per URL nur blablub und ordnetst über das Array die Datei blablubblub.jpg zu.
Du willst doch Dateien runterladen. Oder willst Du Dateien übergebn und am Server speichern?
Grüße aus Würzburg
Julian
Wenn ich das der Seite richtig entnehme, dann dient das Array lediglich dazu, keine Dateinamen im Klartext per URL zu übergeben. Du übergibst also per URL nur blablub und ordnetst über das Array die Datei blablubblub.jpg zu.
Also, ich möchte die Dateien donloaden.
Aber wie schriebe ich das dann?? Kann ich das "file1" =>
stehen lassen oder muss das verändert werden? Was kommt danach? Mein Ordner /Bilder/upload/? und danach? $ bild, oder was?"
Hallo.
Ok, gehen wir mal eben den Code (http://www.dclp-faq.de/q/q-datei-download.html) durch mit paar Kommentaren mehr und etwas auf Dich zugeschnittener.
Wir wollen die Datei blablub.jpg aus dem Verzeichnis c:/apache/geheim/ zum Download anbieten und blubber.gif aus c:/apache/geheim/test/
// $download sei der Bezeichner für die zu ladende Datei.
// Als Bezeichner wählen wir 'bla' bzw. 'blubber'.
$download = $_GET['download'];
// Dieses Verzeichnis liegt außerhalb des Document Root und
// ist nicht per URL erreichbar.
$basedir = "c:/apache/geheim";
// Übersetzung von Download-Bezeichner in Dateinamen.
$filelist = array(
"bla" => "blablub.jpg",
"blubber" => "test/blubber.gif"
);
// Einbruchsversuch abfangen. D.h. alles was wir nicht explizit als Download im Array benannt haben, löst eine Fehlermeldung aus.
if (!isset($filelist[$download]))
die("Datei $download nicht vorhanden.");
// Wenn soweit alles ok, erzeugen wir die nötigen Header damit die Datein nicht vom Browser geöffnet wird (Wollen ja einen Speicherdialog) und liefern die Datei an den Browser aus.
// 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);
Grüße aus Würzburg
Julian
Ich weiß nicht, was daran so schwierig ist, aber ich krieg's einfach nicht hin!
Ich hab jetzt mal bei $download einen echten Dateinamen genommen, quasi so: $download = "Dateiname.JPG";
$basedir = "/data/members/free/tripod/de/x/x/x/xxxxxx/htdocs/";
Dann steht bei mir $filelist = array(
"file1" => "Bilder/upload/Dateinamen.JPG")
Wo ist mein Fehler??
Bitte helft mir!!
Hallo.
Ok, mein beispiel war entweder nicht gut gewählt oder wurde nicht verstanden.
$download = "Dateiname.JPG";
Über diesen Wert ^^^ ordnest Du nur den Dateinamen bzw. den Pfad zu. D.h. in Deinem beispiel muss das Array wie folgt sein:
array("Dateiname.JPG" => "Bilder/upload/Dateinamen.JPG")
Sinn dieser Methode ist eigentlich, dass in der URL eben keine Dateinamen oder Pfade erscheinen müssen.
Grüße aus Würzburg
Julian
Hallo.
Ok, mein beispiel war entweder nicht gut gewählt oder wurde nicht verstanden.
$download = "Dateiname.JPG";
Über diesen Wert ^^^ ordnest Du nur den Dateinamen bzw. den Pfad zu. D.h. in Deinem beispiel muss das Array wie folgt sein:
array("Dateiname.JPG" => "Bilder/upload/Dateinamen.JPG")Sinn dieser Methode ist eigentlich, dass in der URL eben keine Dateinamen oder Pfade erscheinen müssen.
Grüße aus Würzburg
Julian
Hi!
Ich habe ein ähnliches Problem wie Tanka. Mein Problem ist folgendes: Ich üebrgebe ja einen Dateinamen mit $_GET['download']. Deswegen kann man doch nicht jedes mal den Dateinamen in dem Array ändern, oder?
array("Dateiname.JPG" => "Bilder/upload/Dateinamen.JPG")
Wie macht man das denn, wenn Dateiname.jpg eine Variable ist??
Danke schonmal im Voraus
Hallo.
Ich habe ein ähnliches Problem wie Tanka.
Würde sagen, Du hast dasselbe Problem.
In dem Array definiert ihr _alle_ Dateien, die ihr zum Download anbieten wollt. Jede Datei bekommt dabei einen Bezeichner (Was via $_GET['download'] ankommt) und eine Quelle.
array ("bezeichner1" => "quelle/der/datei",
"bezeichner2" => "quelle/dieser/datei")
Damit wird vermieden, dass jemand andere Dateien von Eurem Server downloaden kann. Nur die im Array angegebenen Dateien werden von Skript zum Download akzeptiert.
Vielleicht hilft es Euch etwas, wenn Ihr Euch das Skript und dabei vor allen die vorkommenden Arrays mal etwas genauer anschaut, und schaut, wo welcher Wert aufgerufen wird.
Grüße aus Würzburg
Julian