Java Download Limit

muniqe

Grünschnabel
hi, und zwar habe ich ein problem mit meiner page, ich habe sehr viele besucher 1500 - 3000 pro tag und downloads habe ich auch,
und wenn 100 user zur gleichen zeit ein und die selbe datei runterladen dann beansprucht es den server total!
also ich suche ein java oder php script wo ich den downloads ein limit verpassen kann, so das man die datei nur 10 mal pro stunde runterladen kann und wenn dann das limit ereicht ist dann soll der hinweis kommen "limit wurde erreicht reset folgt zu jeder vollen stunde!"
kennt jemand so ein script in java oder php oder so?
oder kann mir da jemand helfen bin ein absoluter bitte um hilfe!

habe schon anti-leech versucht nur kommen mir da zuviele popups!



suchfunktion benutzt aber nichts gefunden!
 
Zuletzt bearbeitet:
Mein Vorschlag: Leg eine Tabelle zum Aufzeichnen der Downloads an, in der du die Zeitpunkte mitnotierst. Dann kannst du vor Versenden der herunterladbaren Daten überprüfen, wie viele bereits innerhalb einer gewissen Zeitspanne Daten heruntergeladen haben und dementsprechend reagieren.
 
ich habe davon ehrlich keine ahnung aber ich weiss das es möglich ist :) ,
ok ich erkläre es nochmal, es wird ein link gesetzt diesen link kann nur 10mal in der stunde anklicken, versucht der elfte user zu klicken...... kommt der hinweis "limit wurde erreicht reset volgt zu jeder vollen stunde!

das müst doch irgennt wie mit java zu machen sein, kann mir da keiner helfen oder kennt da jemand was?
 
Eine serverseitige Lösung ist viel sicherer: Was passiert, wenn der UA beispielsweise JavaScript nicht unterstützt? Die von mit vorgeschlagene datenbankbasierte Variante entscheidet bereits serverseitig, ob der Vorgang zulässig ist oder nicht.
 
ich habe da was gefunden das läuft nach tarrific limit, ich brauche es als klick limit also nur zehn mal klickbar dannach hinweis "limit ereicht!

<?php
//config
$stFile = 'verzeichnis/meineDatei.zip'; //Pfad zur datei
$stFileName = 'meineDatei.zip'; //name der datei
$iTrafficLimit = 1024*1024*1024*1024*4; //trafficlimit



$iSize = filesize($stFile);
$iTraffic = @implode('',file('traffic.txt'));
if(!$iTraffic){
$iTraffic = 0;
}
if($iTraffic+$iSize <= $iTrafficLimit){
//download
header("Content-type: application/octet-stream");
header("Content-disposition: attachment;

filename=".$stFileName);
header("Content-Length: ".$iSize);
header("Pragma: no-cache");
header("Expires: 0");
readfile($stFile);

$fp = fopen('traffic.txt','w');
fputs($fp,$iTraffic+$iSize);
fclose($fp);
}else{
echo 'TrafficLimit erreicht! Datei kann nicht

gesendet werden';
}
?>
 
Wieso benutzt du nicht die einfachere, datenbankgestützte Variante? Hast du keinen Zugriff auf eine Datenbank?
 
Gumbo hat gesagt.:
Wieso benutzt du nicht die einfachere, datenbankgestützte Variante? Hast du keinen Zugriff auf eine Datenbank?

Wenn ich Wüste wie das geht würde ich es mach, aber ich habe keine Ahnung...... :(
kannst du mir vieleicht helfen?
 
Sicher kann ich das: Erstelle eine Tabelle mit folgendem SQL-Code:
Code:
CREATE TABLE IF NOT EXISTS `download` (
	`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
	`unix-timestamp` INT(11) UNSIGNED NOT NULL,
	PRIMARY KEY ( `id` )
);
Diese Abfrage kannst du entweder über Hilfsprogramme (z. B. MySQL Query Browser, phpmyadmin) oder auch über PHP senden.

Danach noch folgendes Skript:
PHP:
<?php

	// Verbindung zur MySQL-Datenbank herstellen

	$file = '/pfad/zur/Beispieldatei';

	$query = "
		SELECT
		        `unix-timestamp`
		  FROM
		        `download`
		  WHERE
		        ( ".time()." - `unix-timestamp` ) < 86400
		  ORDER BY
		        `unix-timestamp` DESC
		";
	$result = mysql_query($query);

	if( mysql_num_rows($result) >= 10 ) {

		header($_SERVER['SERVER_PROTOCOL'].' 503 Service Unavailable');
		header('Content-Type: text/plain');
		mysql_data_seek($result, mysql_num_rows($result)-1);
		$row = mysql_fetch_array($result, MYSQL_ASSOC);
		echo 'Download ist erst am '.date('r', $row['unix-timestamp']).' möglich!';
		exit;

	} else {

		$query = "
			INSERT INTO
			        `download`
			  SET
			        `unix-timestamp` = ".time()."
			";
		if( !mysql_query($query) ) {
			header($_SERVER['SERVER_PROTOCOL'].' 500 Internal Server Error');
			exit;
		} else {
			header('Content-Type: application/octet-stream');
			header('Content-Disposition: attachment; filename="'.basename($file).'"');
			header('Content-Length: '.filesize($file));
			readfile($file);
			exit;
		}

	}

?>
Ich hoffe, es funktioniert.
 
Zurück