Limiter la vitesse de téléchargement en utilisant PHP
J'ai trouvé sur Google certains scripts PHP afin de limiter la vitesse de téléchargement d'un fichier, mais le fichier de téléchargement à 10 Mbits /s ou si c'télécharger à 80 kbit /s comme je l'ai mis, au bout de 5 mo, il arrête le téléchargement.
Peut-on me dire où je peux trouver un bon PHP télécharger de la limite de vitesse script s'il vous plaît?
Merci beaucoup
--- Edit ---
Voici le code :
<?php
set_time_limit(0);
//change this value below
$cs_conn = mysql_connect('localhost', 'root', '');
mysql_select_db('shareit', $cs_conn);
//local file that should be send to the client
$local_file = $_GET['file'];
//filename that the user gets as default
$download_file = $_GET['file'];
//set the download rate limit (=> 20,5 kb/s)
$download_rate = 85;
if(file_exists($local_file) && is_file($local_file)) {
//send headers
header('Cache-control: private');
header('Content-Type: application/octet-stream');
header('Content-Length: '.filesize($local_file));
header('Content-Disposition: filename='.$download_file);
//flush content
flush();
//open file stream
$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);
}
//close file stream
fclose($file);}
else {
die('Error: The file '.$local_file.' does not exist!');
}
if ($dl) {
} else {
header('HTTP/1.0 503 Service Unavailable');
die('Abort, you reached your download limit for this file.');
}
?>
source d'informationauteur Jeremy Dicaire
Vous devez vous connecter pour publier un commentaire.
La raison de votre téléchargement s'arrête au bout de 5 MO est parce qu'il prend plus de 60 secondes pour télécharger 5MO à 80 KO/s. La plupart de ces "limiteur de vitesse" scripts utilisent
sleep()
pour faire une pause pendant un certain temps après l'envoi d'un morceau, reprendre, envoyer un autre bloc, et la pause de nouveau. Mais PHP prendra automatiquement fin d'un script si il est en cours d'exécution pendant une minute ou plus. Lorsque cela se produit, le téléchargement s'arrête.Vous pouvez utiliser
set_time_limit()
pour éviter que votre script soit résilié, mais certains hébergeurs de sites ne vous permettra pas de le faire. Dans ce cas, vous êtes hors de la chance.Un deuxième est trop de temps, il va s'assurer que le client pense que le serveur ne répond pas et prématurément la fin du téléchargement.
Changement
sleep(1)
àusleep(200)
:Downloader classe est bonne, mais ont un problème si vous avez deux téléchargements en même temps, vous perdrez
max_execution_time
valeur.Quelques exemple:
Télécharger le premier fichier(taille = 1mb; temps de téléchargement de 100 secondes )
Après une seconde de télécharger le second fichier ( taille = 100 mo; télécharger time = 10000 secondes)
D'abord télécharger le jeu
max_execution_time
à 0Deuxième rappelez-vous
_oldMaxExecTime
0D'abord télécharger la fin et le retour
max_execution_time
à l'ancienne valeurDeuxième télécharger la fin et le retour
max_execution time
à 0J'ai essayé ma main à une classe personnalisée qui peuvent vous aider à composer avec la limitation du débit de téléchargements, vous pouvez essayer la?
J'ai hébergé le fichier comme un résumé aswell sur github ici. - https://gist.github.com/3687527
essayez ceci:
http://labs.easyblog.it/download-limiter-php/
à l'aide de pv de commande unix pour le mieux pour une plus grande précision dans la bande passante
Tout d'abord
max_execution_time
est le temps d'exécution de votre script. Le sommeil n'est pas de la partie.Concernant la limitation de vitesse vous pouvez utiliser quelque chose comme un Token bucket. J'ai mis le tout dans une commode de la bibliothèque pour vous:
de la bande passante du papillon/de la bande passante-accélérateur