• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Parallel Download verhindern

Ron Wood

New member
In den Weiten des Web finde ich nichts wirklich passendes. Möglich ist es aber, zeigen zumindest Filehoster!

WAS ?

Verhindern, das 1 (EIN) User mehrere Dateien auf einmal (parallel) herunterlädt.
Ein Datei Download soll demnach nur möglich sein, wenn gerade kein Download für diesen User aktiv ist.

Für die Download aktivierung wird die entsprechende ID an ein PHP Script übergeben. Dort denke ich mir die Möglichkeit "einzuschreiten".

Mit IP und/oder SessionID des Users denke ich mir da was...
Aaaaber wie stelle ich verläßlich fest, das der vorige Download beendet bzw abgebrochen wurde ??

Zielperson ist eigentlich nicht der liebe User sondern die Suchmaschinen mit ihren Bots, die zwar alles schön indexieren sollen, aber dabei nicht alle vorhandenen Slots belegen sollen. Im Downloadlog sind da bis zu 8 parallel Downloads zu verzeichnen und die Dinger kommen ja immer wieder. Aussperren wäre zwar auch eine Möglichkeit, ist aber dann doch nicht der Sinn der Sache...

Hoffe doch, das mir hier wer weiterhelfen wird!
 
Ich glaube mit einem PHP-Skript wirst du dieses Problem nicht zufriedenstellend lösen können.
Mal angenommen, du stellst fest, dass ein Bot bereits eine Datei x downloaded und jetzt eine weitere Datei y anfordert. Was willst du ihm dann statt der Datei y anbieten? Eine Seite auf der steht, du lädst schon was runter? Versteht er nicht. Ich kenne auch keinen passenden HTTP-Status-Code. 404 Not Found ist in dem Fall ja auch nicht im Sinne des Erfinders.

Was für Dateien laden sich den die Bots runter und warum sollten sie das nicht dürfen?
 
In der mittlerweile recht umfangreichen Infoseite über unseren Heimatort und die Region ist auch ein PDF Downloadarchiv der Regionalzeitung enthalten.

Alle möglichen Suchmaschinen sind permanent dabei diese PDF Zeitungen zu indexieren. Dort (bei den Suchmaschinen) sind die diversen Ausgaben bei entsprechender Anfrage zu finden.
So soll es ja auch sein.
Auch wenn der Webserver recht flott und FLAT ist, möchte ich doch grundsätzlich die vorhandenen Recourcen für die Besucher reservieren.

Für den Sinn der Sache wohl fehl am Platz "very strange bots" mit ihren IP Ranges sind hier ohnehin ausgesperrt.

Bei bestimmten Filehostern kannst Du ja auch nur immer eine Datei downloaden. Die Meldung bei versuchten Mehrfachdownload ist da ja auch nur für den Besucher gedacht.

Also, wenn die das können muss es ja gehen...

Den Download, damit nur ja ein Downloaddialog angeboten wird, startet mit dem Script hier unten:

PHP:
if (file_exists($pfad . $dl)) {
	header("Content-Type: application/pdf");
	header("Content-Length: ".filesize($pfad . $dl));
	header("Content-Disposition: attachment; filename=" .$dl);
	readfile($pfad . $dl);
exit();

In den entsprechenden Tuts finde ich nichts, was man eventuel hier einflechten könnte.

Dazu Meldungen zu was auch immer anzuzeigen wird nicht das Problem sein.
Es fehlt eine velässliche "Funktion" oder Statusabfrage über den "Zustand" des gestarteten Downloads.

Clientseitig mit Javascript ein Zeitlimit oder ähnliches zu setzen geht mangels Statusinfo an der Realität vorbei.
Server access_log ist zu "Fett" um vernünftig damit zu arbeiten.
HTACCESS hat anscheinend auch keine Möglichkeiten dazu.
 
Aber die dringerende Frage ist doch, was du dem Bot anstatt der Datei senden willst. Denn irgendetwas musst du ja tun. Denn das Problem ist ja, dass der Bot dann die Fehlerseite indiziert... auch nicht Sinn der Sache.
 
Bei bestimmten Filehostern kannst Du ja auch nur immer eine Datei downloaden. Die Meldung bei versuchten Mehrfachdownload ist da ja auch nur für den Besucher gedacht.

Also, wenn die das können muss es ja gehen...
Naja, das dürfte wohl eine ganz einfache IP Sperre sein. Du erlaubst einfach einer IP nur einmal einen klick auf einen Downloadlink innerhalb eines definierten Zeitraums.
 
Naja, das dürfte wohl eine ganz einfache IP Sperre sein. Du erlaubst einfach einer IP nur einmal einen klick auf einen Downloadlink innerhalb eines definierten Zeitraums.

Damit ist aber nicht sicher gestellt, dass der Download in dieser Zeit fertig ist und auch nicht, dass ein neuer Download sofort begonnen werden kann, sobald der laufende fertig ist.

Dazu Meldungen zu was auch immer anzuzeigen wird nicht das Problem sein.
Doch, weil die Meldung ja für einen Bot gedacht ist.
Sag mir wie du einem Bot erklären willst, dass er diese Datei momentan für ihn nicht verfügbar ist, er sie aber später anfordern kann. Bevor du darauf keine Antwort hast, oder bereit bist, dass es zufällig ist ob eine PDF indiziert wird oder nicht, brauchst du nicht nach einer Lösung deines Problems zu suchen.
 
Damit ist aber nicht sicher gestellt, dass der Download in dieser Zeit fertig ist und auch nicht, dass ein neuer Download sofort begonnen werden kann, sobald der laufende fertig ist.
Das ist bei Filehostern auch nicht der Fall. Du darfst innerhalb einer gewissen Zeit, die *deutlich* höher als die durchschnittliche downloadzeit liegt, nur einen download ausführen. Egal, ob der jetzt fertig ist oder nicht. Du kannst in dieser Zeitsperre keinen zweiten unter dieser IP starten - Ron hatte nach dem Mechanismus bei Filehostern gefragt.
 
Die Zeit ist aber in der Regel Downloadzeit+x und das x ist dabei fest definiert. Folglich stellen diese Seiten fest, wann der Download abgeschlossen wurde. So habe ich Rons Anfrage verstanden (und bin mir beim nochmaligen Lesen auch sicher dass diese so gemeint war).
 
Danke Freunde für die rege Anteilnahme.

Ein Tipp, um den es ja eigentlich geht, in welcher Form auch immer eine "Download Statusmeldung" zu erhalten war leider nicht dabei.

Eine besondere Meldung für den Bot kann entfallen.
Die haben das ganze Archiv bereits (sehr) mehrfach besucht. Monatelang IP Range ausgesperrte Bots waren nach Aufhebung der Sperre sofort wieder da.

Die Timer Idee finde ich allerdings gut und wird so ihren Zweck erfüllen. Ich vergebe eine Session ID und beim 2. und mehr Download muss lediglich ein paar Sekunden gewartet werden. Erst mal erforschen was die Bots machen....

Ich werde weiter berichten ob das so funktioniert.
Für weitere Ideen und Tipps bitte nicht nachlassen :rolleyes:
 
Sag mir wie du einem Bot erklären willst, dass er diese Datei momentan für ihn nicht verfügbar ist, er sie aber später anfordern kann. Bevor du darauf keine Antwort hast, oder bereit bist, dass es zufällig ist ob eine PDF indiziert wird oder nicht, brauchst du nicht nach einer Lösung deines Problems zu suchen.

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.4
503 Service Unavailable

Einen Status könnte man implementieren indem man nicht readfile auf die komplette datei loslässt sondern die datei öffnet und dann blockweise ließt (while(!feof... fread($file, somebytes)
und nach jedem fread call die gesendeten bytes irgendwohin reported (datenbank).
Mit ein bischen rechnen und raten kann man dann sogar den retry-after header so clever setzen dass die suchmaschine relativ bald wieder kommt nachdem der aktuellen download beendet ist.

Alles in allem ziemlich machbar würd ich sagen. (und zwar clean ohne unsaubere cheats)
 
Zuletzt bearbeitet:
Danke nochmal für die Vorschläge.

Ich habe das vorerst so gelöst, das es nach dem jeweils Ersten Download ein kurzes "sleep" vor dem nächten Download gibt.
Die Download ID stehen in einer Liste. Der erste Zugriff auf die Liste löst die Wartezeit für den jeweils nächten Zugriff aus.
Gibt es keinen unmittelbaren Folgezugriff, wird die Wartezeit gelöscht. Session ID wie oben angedacht entfällt logischerweise.

Die "Erforschung" hat gezeigt das Bots offensichtlich nach dem Zufallsprinzip nicht mehr als 6-7 Downloads (laut Timestamp fast gleichzeitig) aktivieren.

Niemand wird so ausgeschlossen, der Ansturm :rolleyes: wird etwas gestreut und die kurze Wartezeit merkt auch keiner.

Mal sehen was die weiteren Forschungen dazu ergeben...
 
Zuletzt bearbeitet:
Zurück
Oben