Zuvor gestylte Frage: http://pastebin.com/cr432nLQ
Ich habe beschlossen, die gesamte Frage zu diesem Problem neu zu formulieren und so gründlich wie möglich vorzugehen. Sie können die zuvor gestellte Frage im obigen Paste lesen.
Zunächst einmal vielen Dank an alle für ihre Antworten, aber leider bin ich nicht weitergekommen. Ich brauche immer noch Hilfe für mein Problem.
Also, ich benutze ein jQuery-Plugin namens blueimp jQuery File Upload, das sich sehr gut um die asynchrone Dateiübertragung kümmert und viele Optionen enthält. Das Plugin funktioniert für meine Zwecke gut genug, aber es gibt diese serverseitige Prüfung, die ich durchführen muss, um mich vor missbräuchlichen Benutzern zu schützen. Ich spreche von der Begrenzung der Anzahl der gleichzeitigen Uploads.
Das Plugin funktioniert standardmäßig so: Der Benutzer wählt eine Anzahl von Dateien aus (oder zieht sie in die Drop-Zone) und jede Datei erstellt eine separate XHR-Instanz, die dann mein upload.php
-Skript aufruft, das sich um die Speicherung der Dateien kümmert. Das PHP-Upload-Skript behandelt die XHR-Anfragen, als handele es sich nur um ein Bild, sodass jedes Bild, das hochgeladen werden muss, das upload.php
-Skript separat aufruft.
Was ich meinen Benutzern erlaube, hochzuladen, sind Bilder. Allerdings möchte ich einige Grenzen für die Anzahl der Uploads festlegen, nämlich 10 für normale Benutzer und 20 für Premium-Benutzer. Dies ist mit JavaScript möglich, ja, aber ich vertraue JavaScript nicht wirklich für diese Art der Validierung, daher suche ich eine serverseitige Validierung. Aber wie? Dies ist ziemlich unmöglich (zumindest für mich), sicher durchzuführen. Ich muss auf meinem Upload-Skript irgendwie sicherstellen, dass der Benutzer die Grenze von 10 (oder 20) Bilduploads nicht überschritten hat.
Ich habe herausgefunden, dass dieses jQuery-Plugin diese Option namens singleFileUploads
hat:
Standardmäßig wird jede Datei einer Auswahl über eine individuelle Anfrage für XHR-Uploads hochgeladen. Legen Sie diese Option auf false fest, um Dateiauswahlen in einer Anfrage hochzuladen.
Hinweis: Das Hochladen mehrerer Dateien mit einer Anfrage erfordert, dass die Option multipart auf true gesetzt ist (standardmäßig).
- Typ: boolean
- Standard:
true
Dies tut ziemlich genau das, was ich brauche - Es sendet ein vollständig gefülltes $_FILES
-Array mit allen eingereichten Bilduploads. Aber ich sehe immer noch ein Problem damit. Dies wird immer noch von JavaScript selbst entschieden. Kann ein Benutzer diesen Teil des Skripts ändern und singleFileUploads
erneut auf false
setzen? Ich denke, das können sie! Wenn sie das nicht könnten, dann wäre diese Frage jetzt beantwortet - aber ich weiß es nicht.
Es gibt eine Antwort weiter unten, die die Verwendung von Apaches mod_qos
vorschlägt, um die Anzahl der Bilduploads zu begrenzen, aber ich habe keine Ahnung, wie man es für die beiden verschiedenen Benutzertypen (normal und Premium) unterschiedlich machen kann.
Bitte beachten Sie, dass auch Gästen das Hochladen von Bildern erlaubt ist und die Grenze für kostenlose Benutzer auch für sie gelten sollte.
Was habe ich bisher in Bezug auf all das versucht?
Ich habe versucht, eine Lösung mit Sitzungen zu erstellen, die verfolgen würden, wie viel der Benutzer hochlädt und bei jedem neuen Upload würde der Wert der Sitzung um eins erhöht werden - eine Lösung, die wie unten vorgeschlagen nicht sicher genug war, da die Cookies gelöscht werden können. Abgesehen von diesem Versuch konnte ich nichts aus den unten stehenden Antworten anwenden.
Die Frage
Nun, die Frage ist seit Beginn ziemlich klar: Wie kann ich die Anzahl der gleichzeitigen Bilduploads auf 10 für Gäste/kostenlose Benutzer und 20 für Premium-Benutzer sicher begrenzen?
BEARBEITEN: Es ist wohl erwähnenswert, dass jedes hochgeladene Bild seine eigene Zeile in der Datenbank mit Zeitpunkt und Namen erhält. Vielleicht kann dies helfen!
Vielen Dank.