Hallo,
ich verwende schon mehrere Jahre ein Downloadscript für ein Vortragsarchiv. Die Dateien sind großteils MP3s und ca. zwischen 1 und 50 MB groß. Der prinzipielle Aufbau des Scriptes ist:
1. Prüfen ob die Person berechtigt ist diese Datei runterzuladen (optional)
2. Ausgeben des Headers
3. Lesen/Ausgeben der Datei mit fread/echo
4. Eintragen des Downloads in die Datenbank zum zählen der vollständigen Downloads
Ich mache das ganze über ein Downloadscript und nicht über einen Direktdownload, da (1.) manche Vorträge nicht öffentlich sind und (4.) die Downloadzahlen einen ungefähres Feedback geben sollen welche Vorträge besonders gefragt sind.
Der Teil (2./3.), also das eigentliche Downloadscript gefällt mir nicht so ganz, da es vom prinzipiellen Aufbau her fehleranfällig ist und ich auch die letzten Tage eine Rückmeldung bekam, dass bei einer Person die zweite Hälfte des MP3-Files fehlt (Aber insgesamt sind es momentan ca. 100 Files mit avg. 150 Downloads).
Wie könnte man das Script verbessern oder was wären bessere Ansätze, mit denen man auch eine Zugriffskontrolle (ohne .htaccess) und eine zählmöglichkeit vollständiger Downloads hat?
Gruß
Thomas
Hier ist das momentane Script skizziert:
switch ($file_extension) {
case "mp3": $ctype="audio/mpeg"; break;
// ...
}
if (file_is_valid($filename)) {
// Sende Header
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename="".basename($filename)."";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".@filesize($filename));
// Öffne Datei
$fh = fopen($filename, 'rb');
while(!feof($fh)) echo fread($fh, 8192);
fclose($fh);
}