Limiter la vitesse de dl au personne non enregistré

Eléphant du PHP | 111 Messages

12 févr. 2013, 18:28

Salut à tous, suis encore confronté à un problème pour un de mes site...
Je prose des fichiers en dl hébergé sur mon serveur et je voudrais pouvoir limité la vitesse de dl au utilisateurs non enregistrés 75ko et 200 pour les enregistrés.
Pour télécharger mes fichier j'utilise le code suivant:
function telecharger_fichier($fichier, $id = 0)
{
 $chemin = id_dossier($id) . $fichier;
 if(file_exists($chemin) && strpos($fichier, '/') === FALSE && strpos($fichier, '.') !== 0)
 {
  header('Content-Description: File Transfer');
  header('Content-Type: application/octet-stream');
  header('Content-Disposition: attachment; filename='. basename($chemin));
  header('Content-Transfer-Encoding: binary');
  header('Expires: 0');
  header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  header('Pragma: public');
  header('Content-Length: ' . filesize($chemin));
  readfile($chemin);
  
	include("data_bd.php");
	connexion_bd();
	$insert = mysql_query("UPDATE roms SET download = (download+1) WHERE id=".$_GET['dl']."");

	if (!$insert){
		die('Requête invalide : ' . mysql_error()); 
	}
 
  exit; 	  
 }
 else
  require('erreur.php');
}
Pour la partie limite de débit je ne vois pas comment faire, j'ai test le seul bout de code dispo sur la toile mais ça ne fonctionne pas.
Si vous avez des solutions je suis preneur.
Merci

Eléphant du PHP | 343 Messages

12 févr. 2013, 21:45

Aucune idée si ça marche mais j'ouvrirai le fichier et je jouerai avec fread quelque chose comme:
fread($fichier, $tavitesse); et tu fais un sleep(1) pour limiter ta vitesse à X ko/sec. Tu mets tout ça dans une boucle qui check qu'on est pas à la fin du fichier et il faudrait peut-être vider les tampons et envoyer ça au navigateur à chaque itération de la boucle (à tester).
J’espère que j'ai été assez clair :D
Développeur web

ViPHP
xTG
ViPHP | 7331 Messages

13 févr. 2013, 09:54

Je pense pas que ça soit une bonne idée.
Pendant un temps je pense que c'était ainsi que fonctionnait la plateforme d'hébergement de fichier rapidshare.
Sauf que beaucoup de navigateurs annulaient le téléchargement, sans doute en pensant que le serveur ne répondait plus.

Je pense que pour cela c'est pas au niveau du code qu'il faut regarder mais plutôt au niveau du serveur et de sa configuration.
Voire même lui rajouter un service qui gère cela. Mais là j'avoue que je parle mais j'y connais rien...

Eléphant du PHP | 111 Messages

13 févr. 2013, 10:41

Merci pour vos réponses :D . Il est vrais que j'ai trouver des fonctionnalité pour limiter la vitesse des téléchargements via le serveur le problème c'est que pour l'instant je ne suis pas sur dédié...
Sinon l'alternative serai de limiter le nombre de dl par ip.

Mammouth du PHP | 2278 Messages

13 févr. 2013, 11:41

Est-il possible de passer par FTP:
deux serveurs ftp distincts réglés diféremment, un pour les anonymes (limite de vitesse ou du nb de connexions simultanées),un pour les enregistrés, en passant par les fonctions ftp de PHPour le téléchargement ?
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 111 Messages

13 févr. 2013, 23:35

je n'ai pas exploré cette piste pour l'instant mais je vais explorer cette piste.
Merci

Eléphant du PHP | 120 Messages

16 févr. 2013, 14:04

Les dernières versions d'Apache permettent de réduire la vitesse de téléchargement artificiellement.
http://httpd.apache.org/docs/2.4/mod/mod_ratelimit.html