"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

datei - download begrenzen

onkelolf 01.12.2005 - 22:42 728 4
Posts

onkelolf

1*-voter
Avatar
Registered: Aug 2002
Location: berlin.de
Posts: 1188
hab ein problem: ich möchte eine datei sharen aber leider hab ich nicht ganz so viel freitraffic und da ich da schonmal eine unangenehme erfahrung mit >50 euro nachzahlung hatte:

ich brauche ein script, welches für eine datei nur eine bestimmte anzahl downloads zulässt (die ich für jede datei einzelnen angeben können will)

vorhanden: php 4.x (ka welche) mysql & keine ahnung meinerseits

DJ_Cyberdance

Here to stay
Avatar
Registered: Jun 2002
Location: Vesterålen
Posts: 1838
Pro Tag begrenzen? Pro Monat? Einmalig? Ich würd die Dateien in einem via HTTP nicht zugänglichen Ordner ablegen, Die Anzahl der maximalen sowie tatsächlichen Downloads würd ich in eine SQL-Datenbank schreiben.

Die Downloads funktionieren dann so, daß der User ein php-File öffnet, das das gewünschte File weiterreicht und gleichzeitig den Counter erhöht. Und wenn #Downloads >= MaxDownloads dann halt leider nicht...

onkelolf

1*-voter
Avatar
Registered: Aug 2002
Location: berlin.de
Posts: 1188
pro monat sollte es begrenzt werden, oder auch einmalig z.b. 50x downloadbar.

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
da wärs doch besser von jedem file immer zu checken obs noch in einem gesetzten Limit ausgeht und wenn nicht error-message display'n

DJ_Cyberdance

Here to stay
Avatar
Registered: Jun 2002
Location: Vesterålen
Posts: 1838
Zitat von watchout
da wärs doch besser von jedem file immer zu checken obs noch in einem gesetzten Limit ausgeht und wenn nicht error-message display'n

Naja, es sollte doch ein Limit pro File geben, was durchaus Sinn macht, damit kleine Dateien weiterhin erreichbar bleiben... Nur die wirklich großen, die den meisten Traffic verursachen, kann man ja limitieren... ich stell mir das mit PHP so vor:

Code: PHP
<?php
// Übergebenen Parameter, id der Datei, lesen:
$fileid = $_POST["fileid"];

// Zur Datenbank verbinden:
$db = mysql_connect("localhost", "user", "password");
mysql_select_db("datenbank",$db);

// Datenbank abfragen
$result = mysql_query("SELECT filepath, max_downloads, count_downloads, content_type FROM file_limit_table WHERE id=$fileid;",$db);
$row = mysql_fetch_row($result);

// Wenn count_downloads >= max_downloads dann ...
if ($row[2] >= $row[1]) {
	// ... weiterleiten an eine Seite mit Fehlermeldung, daß Limit überschritten wurde
	header("location: 'http://.../limit_exceeded.html'");
} else {
	// sonst: Counter um 1 erhöhen
	$counter = $row[2] + 1;
	// und neuen Wert in die Datenbank schreiben.
	$result = mysql_query("UPDATE file_limit_table SET count_downloads=$counter WHERE id=$fileid;", $db);
	// HTTP Content-Type setzen (sollte in der Datenbank stehen)
	header("Content-type: $row[3]"); 
	// Datei lesen und via HTTP ausgeben
	readfile($row[0]);
}
?>

Das setzt natürlich voraus, daß bereits eine SQL-Datenbank auf localhost vorhanden ist, auf die mit username/password zugegriffen werden kann. Dazu gibts How-Tos genug im Netz. Ein nettes Frontend für Windows ist MySQLFront, unter Linux bzw Remote ist phpMyAdmin sehr beliebt. Datenbank braucht zumindest fünf Felder für Pfad, an dem die Datei liegt (Webserver muß drauf zugreifen können, aber nicht innerhalb des www-roots!), maximale Anzahl an Downloads, Ist-Anzahl an Downloads, Application-Type und eine eindeutige ID (Primary Key).

Das Skript da oben ist nur ein ungefährer Vorschlag, keine Ahnung, ob das so funktioniert, habs nicht ausprobiert. Wenn Du monatlich den Counter zurücksetzen willst, dann kannst Du ja monatlich via cronjob ein Skript ausführen, das nur "UPDATE file_limit_table SET count_downloads=0;" zu jedem Monatsersten ausführt. Oder Du loggst in einem weiteren, verknüpften Table die Downlodas einzeln mit und kannst dann die bisher in diesem Monat durchgeführten Downloads zählen. Sicher die professionellere Lösung.

Falls Du ein Skript findest, das funktioniert, poste es doch bitte einfach hier, damit andere auch was davon haben.
Bearbeitet von DJ_Cyberdance am 02.12.2005, 23:26
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz