Clanintern Clanintern Clanintern

Forum

Öffentliche Foren
FORUM: Spiele & Computer THEMA: php/html: download erst nach login
AUTOR BEITRAG
Perseus

RANG Deckschrubber

#1 - 04.05 10:23

Hiho

Ich hab eine kleine Community, in der man auch bestimmte Files hochladen kann, diese werden manuell von Admins geprüft, ob sie hingehören und dann "freigeschalten", indem in einer mysql-Tabelle der Status der Datei als geprüft gespeichert wird und in der Community nur die Files angezeigt werden, die als geprüft gelten.


Jetzt hab ich aber ein logisches Problem, für das mir keine Lösung einfällt:

Wenn jemand ein File hochgeladen hat, es noch nicht geprüft ist oder überhaupt jemand irgendwie den Pfad/Dateinamen irgendeines Files rausfindet, kann er wohl die Datei herunterladen.

Wie kann ich das verhindern, wie erreiche ich, dass der Dateidownload nur funktioniert, solang der User eingeloggt ist (Login läuft über Sessions in php)?
stud. iur. klaustopher *in stillem gedenken*

RANG Master of Luck

#2 - 04.05 10:59

Du legst die Dateien außerhalb des htdocs Verzeichnis ab, sodass man keinen Zugriff darauf hat. Oder du sperrst den Zugriff auf das Verzeichnis in dem die Dateien liegen mit htaccess....

Dann kannst du über ein PHP Script den Download steuern:

PHP-code:

<?
// Hier machst du dann deine ganzen Überprüfungen,
// ob der User eingeloggt ist, und du holst den Dateinamen
// und den Speicherort aus der Datenbank, sodass
// $fileName => Der Dateiname ist
// $filePath => Der Pfad zur Datei, wo sie auf dem Server liegt
// ist.

// Bsp:
// $fileName = "meinTollesLied.mp3";
// $filePath = "/pfad/auf/dem/server/wo/niemand/rankommt.mp3";

header("Cache-Control: public, must-revalidate");
header("Content-Type: application/octet-stream");
header("Content-Length: " .(string)(filesize($filePath)) );
header('Content-Disposition: attachment; filename="'.$fileName.'"');
header("Content-Transfer-Encoding: binary\n");

readfile($filePath);
?>