2011-01-07 11 views
3

Ich entwickle eine schnelle Rapidshare-ähnliche Website, wo der Benutzer Dateien herunterladen kann. Zuerst habe ich einen schnellen Test erstellt Header Einstellung und readfile() verwenden, aber dann fand ich in the comments section es eine Möglichkeit, die Geschwindigkeit des Downloads zu begrenzen, das ist toll, hier ist der Code:PHP: Wie kann man wissen, ob ein Benutzer gerade eine Datei herunterlädt?

$local_file = 'file.zip'; 
$download_file = 'name.zip'; 

// set the download rate limit (=> 20,5 kb/s) 
$download_rate = 20.5; 
if(file_exists($local_file) && is_file($local_file)) 
{ 
    header('Cache-control: private'); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Length: '.filesize($local_file)); 
    header('Content-Disposition: filename='.$download_file); 

    flush(); 
    $file = fopen($local_file, "r"); 
    while(!feof($file)) 
    { 
     // send the current file part to the browser 
     print fread($file, round($download_rate * 1024)); 
     // flush the content to the browser 
     flush(); 
     // sleep one second 
     sleep(1); 
    } 
    fclose($file);} 
else { 
    die('Error: The file '.$local_file.' does not exist!'); 
} 

Aber jetzt meine Frage ist, wie um die Anzahl der Downloads gleichzeitig zu begrenzen? Wie kann ich überprüfen, ob noch eine Verbindung mit der IP eines Benutzers besteht?

Danke.

+8

Bitte verwenden Sie keine schreienden 'KAUFKONTO FÜR SCHNELLER DOWNLOAD UND KEINE WARTEZEIT' Anzeigen. Ich bitte dich. –

+0

Ich werde versuchen, etwas origineller zu kommen. – metrobalderas

+0

thx [15 charzz] –

Antwort

3

Hat ein Benutzer eine Anmeldung? wenn Sie nicht nur Sitzungen verwenden, oder noch besser auf ihre IP-Adresse verfolgen.

Hier ist ein Beispiel-Sessions:

$_SESSION['file_downloading']==true; 
$file = fopen($local_file, "r"); 
while(!feof($file)) 
{ 
    // send the current file part to the browser 
    print fread($file, round($download_rate * 1024)); 
    // flush the content to the browser 
    flush(); 
    // sleep one second 
    sleep(1); 
} 
$_SESSION['file_downloading']=null; 
fclose($file);} 

Dann vor allem diesem Code

if(!empty($_SESSION['file_downloading'])) 

// eine Umleitung durchzuführen oder deren Download-Rate oder etwas zu reduzieren.

Nächste Option ist über IP-Adresse.

//http://wiki.jumba.com.au/wiki/PHP_Get_user_IP_Address 
function VisitorIP() 
    { 
    if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) 
     $TheIp=$_SERVER['HTTP_X_FORWARDED_FOR']; 
    else $TheIp=$_SERVER['REMOTE_ADDR']; 

    return trim($TheIp); 
    } 

Holen Sie sich die Besucher IP-Adresse, speichern Sie diese in der Datenbank zusammen mit dem Datum-Zeit-Stempel. Dann entfernen Sie einfach diese IP-Adresse, wenn die Datei fertig heruntergeladen ist. Verwenden Sie ein Datenbanksystem?

+2

'if (isset ($ _SESSION ['file_download']) && $ _SESSION ['file_download'])' → 'if (! Leer ($ _ SESSION ['file_downloading'])) :) – deceze

+0

@deceze guten Ruf. Bearbeitet das. – Jason

Verwandte Themen