2011-01-07 8 views
3

Je développe un site rapide rapidshare-like où l'utilisateur peut télécharger des fichiers. Tout d'abord, j'ai créé un en-têtes réglage test rapide et à l'aide readfile() mais j'ai trouvé in the comments section il y a un moyen de limiter la vitesse du téléchargement, ce qui est génial, voici le code:PHP: Comment savoir si un utilisateur télécharge actuellement un fichier?

$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!'); 
} 

Mais ma question est, comment limiter le nombre de téléchargements en même temps? Comment puis-je vérifier qu'il y a toujours une connexion avec l'IP de certains utilisateurs?

Merci.

+8

Veuillez ne pas utiliser criant «COMPTE D'ACHAT POUR DES TÉLÉCHARGEMENTS PLUS RAPIDES ET PAS DE TEMPS D'ATTENTE». Je t'en supplie. –

+0

Je vais essayer de venir avec quelque chose de plus original. – metrobalderas

+0

thx [15 caractères] –

Répondre

3

Un utilisateur dispose-t-il d'un identifiant? si ce n'est pas simplement utiliser des sessions, ou même mieux suivre sur leur adresse ip.

Voici un exemple de séances:

$_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);} 

Puis surtout ce code,

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

// effectuer une redirection ou à réduire leur taux de téléchargement ou quelque chose.

L'option suivante est via l'adresse IP. Obtenir l'adresse IP du visiteur, stocker dans la base de données avec l'horodatage. Ensuite, supprimez simplement cette adresse IP lorsque le téléchargement du fichier est terminé. Utilisez-vous un système de base de données?

+2

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

+0

@deceze bon appel. Edité ça. – Jason

Questions connexes