• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Downloaden per ID

Status
Für weitere Antworten geschlossen.

BashGrinder

Neues Mitglied
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:

<a href="/download.php?id=1">Video gepackt downloaden</a>

Wie krieg ich das hin (es soll nichts mitgelogt werden oder sowas...)?
 
Werbung:
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.
 
Zuletzt bearbeitet:
Werbung:
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.
 
Werbung:
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
	
}

?>
 
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...

Code:
$fileid = (int)$_GET['f'];
 
Werbung:
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.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben