Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

Datenbankbasierte Downloads





Frage

hi! ich hab mir gedacht damit niemand mehr von ner anderen Page meine Downloads leecht, pack ich sie einfach in ne Datenbank(auf die man ja nur von localhost zugreifen kann). Das einlesen is ja kein Problem: Mit ner selbsgeschriebenen get_file() Funktion lese ich den Inhalt aus und speicher in als BLOB in der DB(MySQL) dazu speicher ich noch Dateigröße, -name und -extension. Das Prob is nur, wie ich die Datei aus der DB an den Browser gesendet kriege, sobald ein Link geklickt wird. Wär cool wenn jemand ne idee hätte.

Antwort 1 von Nessus

Hi,

warum willst Du das tun?
Größere Dateien in eine DB zu legen ist normalerweise übler Humbug.
Lege die Dateien in ein Verzeichnis außerhalb des Dokument_root und schreibe Dir ein Script, das diese temporär in ein öffentliches Verzeichnis schiebt (zum Download)
Alternativ kann es auch ein mit der .htaccess geschütztes Verzeichnis sein. So kann niemand mehr direkt darauf zugreifen.
Voretil: Du schonst Ressourcen und es ist bedeutend einfacher.

Nessus

Antwort 2 von Saiya-jin

Hi!
Erstmal danke für deine Antwort. aber :

1. Ich hab bei meinem Hoster keinen Schreibzugriff außerhalb des Dokument_roots

2. Selbst wenns unpraktisch ist, mich würd ne Antwort auf meine einfach nur interessieren!

Antwort 3 von semi

Schau Dir das folgende Beispiel an

<?php
$db = mysql_connect("host", "user", "passwd");
mysql_select_db("dbname");

$result = mysql_query("SELECT blobfield FROM table WHERE id=1");
$row    = mysql_fetch_row($result);
$row_l  = mysql_fetch_lengths($result);
mysql_free_result($result);
mysql_close($db);

$data   = $row[0];
$length = $row_l[0];

header("Content-type: application/octet-stream");
header("Content-disposition:attachment; filename=name.bin");
header("Content-Length: $length");

print $data;
?>
Selbstverständlich fehlt hier jegliche Fehlerprüfung.

Gruß,
Michael

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: