Nur ein Download pro IP

nitrit

Angesehenes Mitglied
Hallo Ayomler,

ein Kunde wünscht ein recht ausgereiftes Filehosting-Script, mit etwas "mehr" als die anderen.
Im Grunde kein Problem, doch leider macht mir eine Standardfunktion Sorgen, die man so nicht mit PHP lösen sollte (können schon, so wie hier, aber es ist ersichtlich warum das nicht in Frage kommt denke ich: http://www.jonasjohn.de/snippets/php/dl-speed-limit.htm ).

Fakt:


Ich suche eine Speed-Begrenzung mit der ich regeln kann, dass ein _nicht_-Premium-User nur eine bestimmte Geschwindigkeit zur Verfügung hat (z.B. max 50 kb/s).

Viel wichtiger ist aber noch, dass nur 1 _gleichzeitiger_ Download pro IP möglich sein soll. Wenn also jemand bereits eine Datei herunterläd und eine zweite Anfrage beginnen möchte, soll er eine Fehlerseite erhalten wie "momentan laden Sie bereits...".

Diese 2 Dinge bereiten mir Kopfschmerzen, da ich mir recht sicher bin, dass sie nicht auf absoluter PHP-Basis zu lösen sind.

Ich hoffe man kann mir weiterhelfen
smile.gif
 
Ich bin zwar kein wirklicher Coder, aber das mit der IP könnte man ja so lösen, dass man die IP des Benutzers in einer Datenbank speichert, wenn er auf "Download" geklickt hat. Alle IPs werden nach einem bestimmten Zeitraum gelöscht (bei Rapidshare z.B. ist das nach einer Stunde), wer noch innerhalb der Stunde nochmal laden will, wird ja nochmal auf "Download" klicken und dann prüft das Script ob die IP schon in der Datenbank ist, falls ja, gibt er eben den Text aus. Vielleicht hast du dir das auch so gedacht, aber ich verstehe nicht ganz, wieso man kein php benutzen sollte.

Premiumuser müssen sich ja einloggen, daher sollte man bei nichteingeloggten Usern einfach die Downloadgeschwindigkeit begrenzen. Sollte mit if-Tags gehen, fraglich nur wie das mit der Geschwindigkeit klappt.
 
Du wirst das wohl nur mit so einer Funktion

QUOTE (nitrit @ Sa 17.05.2008, 10:50)Im Grunde kein Problem, doch leider macht mir eine Standardfunktion Sorgen, die man so nicht mit PHP lösen sollte (können schon, so wie hier, aber es ist ersichtlich warum das nicht in Frage kommt denke ich: http://www.jonasjohn.de/snippets/php/dl-speed-limit.htm ).


lösen können. Denn es mag zwar serverweite Konfigurationsmöglichkeiten geben, aber die wirken dann immer für alle Nutzer. Die Information, daß jemand Premiumnutzer ist, steht in der Datenbank und ist per PHP abfragbar - also muß auch auf dieser Ebene die Reglementierung erfolgen. Dann fällt für den Premiumnutzer das Sleep weg.

IP ist banal - mit Zeitstempel eintragen und kontrollieren.

Abgesehen von meiner PHP-Unkenntnis: Was spricht gegen das obige Script?
 
@Dachs: Naja, danke für den versuchten Ansatz aber so kommen wir nicht weiter, denn:

Was ist wenn der User abbricht? Dann steht seine IP noch drin als "lädt".
Und was ist wenn der Download länger als 1h geht? Dann kann er nach 1h 2 Dateien laden.

QUOTE aber ich verstehe nicht ganz, wieso man kein php benutzen sollte


das oben genannte Script kann den Speed bei einem Download per PHP limitieren. Dazu muss aber das Script dauerhaft mitlaufen und irgendwann wird dadurch die Seite überlastet sein, bzw. die PHP-Execution-Time überschritten sein.

Also brauchen wir eine PHP-unabhängige Methode mit der wir dauerhaft den Speed limitieren können (insofern Free-User).
Wir können es aber nicht generell limitieren, also als Standard setzen, da wir dann ja auch Premiumuser limiteren würden...

Ausserdem brauchen wir eine Methode um rauszufinden, ob _momentan_ der User eine Datei lädt. Schätzungen wären hier unangebracht...
 
@jAuer:

genau vor diesem Problem stehe ich auch. Sollten wir das obige Script benutzen wäre die download-kontrolle natürlich ein leichtes...

Wir tragen in der while-schleife also während der ausgabe einfach immer wieder den Zeitstempel nach und können das dann bei einer zweiten Download-Anfrage überprüfen, das stimmt. (oder denke ich da anders als du?)

QUOTE Denn es mag zwar serverweite Konfigurationsmöglichkeiten geben, aber die wirken dann immer für alle Nutzer.

Korrekt...
 
QUOTE (nitrit @ Sa 17.05.2008, 12:33)
QUOTE aber ich verstehe nicht ganz, wieso man kein php benutzen sollte


das oben genannte Script kann den Speed bei einem Download per PHP limitieren. Dazu muss aber das Script dauerhaft mitlaufen und irgendwann wird dadurch die Seite überlastet sein, bzw. die PHP-Execution-Time überschritten sein.


Bei so etwas setze ich einen eigenen Server mit entsprechenden Konfigurationsmöglichkeiten voraus. Ansonsten dürfte das eher aussichtslos sein.



QUOTE (nitrit @ Sa 17.05.2008, 12:33)Was ist wenn der User abbricht? Dann steht seine IP noch drin als "lädt".
Und was ist wenn der Download länger als 1h geht? Dann kann er nach 1h 2 Dateien laden.


Das ist beides eher technischer Kleinkram. Zeitspalte dazu und überprüfen, nach ein paar Stunden ist die IP wieder frei. In .NET gibt es eine IsAlive - Methode, die true zurückgibt, wenn die Verbindung zum Client noch existiert. Etwas ähnliches wird es in PHP geben.

Es gäbe einen ganz anderen Ansatz: Zwei Subdomains einrichten, entweder eigener Apache-Dienst oder entsprechend konfiguriert, einer für free mit Begrenzung, einer für Premium mit höherer Kapazität. Auf der Hauptdomain einen Zufallswert in die Datenbank schreiben, den Nutzer auf eine Url der Subdomain mit dem Zufallswert weiterleiten (als SID), die Subdomain prüft, ob der Wert mit passendem Flag (free/Premium) in der Datenbank ist.

Es könnte zwar auch da notwendig sein, den eigentlichen Download über ein PHP-Script abzuwickeln. Aber dann kann man bsp. für die verschiedenen Subdomains die Limits unterschiedlich setzen. Bei einem 1-Stunden-Download kommt jede Konfiguration an Grenzen -> Uploads einschränken.
 
Ich würde dann eher dazu übergehen (erfordert allerdings einen eigenen Server), das gleich per FTP-Daemon zu reglementieren. Es gibt da sicherlich mehrere verschiedene Möglichkeiten. Ich mach das per proftpd, der sich von der Datenbank (MySQL) die entsprechenden Nutzerdaten holt (Zeitstempel, maximale Bandbreite, IP oder Unique-ID) und dann die Dateien freigibt.
 
Zurück
Oben