Downloaden per ID

So…nachdem das Downloadscript auch auf einem „echten“ Server nicht funzt, will ich das halbwegs selber machen…

Wie folgt: ich will verhindern, dass man, zB PDF Dateien, direkt im Browser öffnen kann und will erreichen, eine beliebiege Datei eine Downlooad - ID zuzuweisen.

Beispiel: Jemand möchte „Video.rar“ downloaden, dann will ich das der HTML Code so aussieht:

Video gepackt downloaden

Wie krieg ich das hin (es soll nichts mitgelogt werden oder sowas…)?

Das direkte herunterladen der Dateien musst du wohl mit htaccess verhindern.

Die Verknüpfung zwischen ID und Datei solltest du in einer Datenbank ablegen.

Für den Download machst du dir ein PHP Script dass den entsrpchenden header setzt und dann die z.b. PDF Datei ausgibt.

Ach Gott nun komm mir doch nicht so weisst Du wieviel ich von PHP verstehe??:smiley:

ein simpler trick wäre, die id an ein weiteres script zu übergeben, dass den download startet und aus dem der wirkliche pfad zur datei nicht hervorgeht.

oder:
du übergibst die id xx:
die dahinter liegende datei kopierst du in ein verzeichnis tmp und startest den download, danach löscht du die datei wieder.

ich denke dann bist du im entwicklerforum falsch. vielleicht wäre die jobbörse was für dich.

mit array() ein array erstellen, die werte (IDs) zuweisen und dann mit header() auf die datei weiterleiten.

Nils aka XraYSoLo

[php]

<? if(isset($_GET['f'])) { $fileid = $_GET['f']; // Links sehen so aus: seite.php?f=23 $row = mysql_fetch_assoc(mysql_query('SELECT * FROM `downloads` WHERE `id`=' .$f)); // Query, um die entsprechenden Daten zu holen $filename = $row['filename']; // Den Dateinamen (+ Pfad wie bei mir) ermitteln und in eine Variable speichern $filetype = mime_content_type($filename); // Den Typ der Datei rausfinden mysql_query("UPDATE `downloads` SET `downloads` = `downloads`+'1' WHERE `id` = $fileid"); // Die obere Zeile ist sogar dafür da, um Downloads bzw. klicks zu zählen. readfile($filename); // Dieser Funktion liest den Inhalt der Datei header("Content-Type: $filetype"); // Hier wird die eigentliche PHP Datei zum Typ des Downloads (damit der Browser das auch versteht) header("Content-Disposition: inline; filename=\"$filename\""); // Diese Zeile ist nur noch dafür da, um den Download-Dialog richtig anzuzeigen #header("Content-length: ".filesize($filename)); // Eigentlich dafür da um die größe der Datei anzugeben. Funktioniert aber glaube nicht ganz } ?>

[/php]

muss readfile net unter die header?

Sn0opy bitte poste keinen dreck… manche hier kopieren sowas nähmlich einfach nur und dann ham wa den salat wenn sie ankommen und sagen das sie gehackt wurden…

$fileid = (int)$_GET['f'];

NUR weil weil das Script diese Sicherheitslücke drin hatte, ist es noch lang kein Dreck und ich muss mich auch nicht so von dir anfahren lassen Oo

Man kann sehr wohl auch normal sagen, dass das Beispiel eine Sicherheitslücke beinhaltet und die durch deinen Snippet beseitigt wird.

Immerhin habe ich im Gegensatz zu allen anderen wenigstens schonma nen Beispiel gepostet :roll:

@ Frank: Es funktioniert zumindestens auch, wenn es darüber steht. Ob das nun richtig ist oder nicht, kann ich nicht sagen.