Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/06/2007, 14h56   #1
Invité de passage
 
Inscription : juillet 2006
Messages : 24
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 24
Points : 2
Points : 2
Par défaut Limiter le débit de téléchargement via PHP

Bonjour, j'ai actuellement un trés gros souci !

J'ai des internautes qui téléchargent des fichiers en masse sur un serveur à une vitesse de 1800Ko/s Max.

Hors à ce rythme le serveur va saturer et moi jvais me faire virer de chez l'hebergeur, je souhaiterais limiter la vitesse à 250Ko/s ca serait largement suffisant !

Voici le code que j'ai trouvé :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function regule_telechargement_local($chemin , $fichier , $vitesse) {
if(file_exists($chemin."/".$fichier) && is_file($chemin."/".$fichier)) {
header("Cache-control: private");
header("Content-Type: application/octet-stream");
header("Content-Length: ".filesize($chemin."/".$fichier));
header("Content-Disposition: filename=$fichier");
flush();
$fd = fopen($chemin."/".$fichier, "r");
while(!feof($fd)) {
echo fread($fd, round($vitesse*1024));
flush();
sleep(1);
}
fclose ($fd);
}
 
}
Et voici le code modifié pour le script que j'utilise :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
$file_extension = strtolower(substr(strrchr($fichieradl,"."),1));
 
    switch ($file_extension) {
        case "pdf": $ctype="application/pdf"; break;
        case "exe": $ctype="application/octet-stream"; break;
        case "zip": $ctype="application/zip"; break;
        case "doc": $ctype="application/msword"; break;
        case "xls": $ctype="application/vnd.ms-excel"; break;
        case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
        case "gif": $ctype="image/gif"; break;
        case "png": $ctype="image/png"; break;
        case "jpeg": case "jpeg":
        case "jpg": $ctype="image/jpg"; break;
        default: $ctype="application/force-download";      }
 
 
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private",false);
    header("Content-Type: $ctype");
    header("Content-Disposition: attachment; filename=\"".basename($fichieradl)."\";");
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".@filesize($fichieradl));
    @set_time_limit(0);
 
 
$vitesse = 1;       //  Pour 1 mo, par exemple
 
flush();              // vide les tampons de sortie
$fd = fopen($fichieradl,"r");       // ouvre le fichier $fichieradl
while(!feof($fd)) {                     // jusqu'a la fin du fichier
echo fread($fd, round($vitesse*1024));      //afficher (=envoyer) environ (=round)  un mo du fichier (=$fd)
flush();              //vide les tampons de sortie
sleep(1);            //attendre une seconde (donc on arrive bien à environ 1mo/s)
}
fclose ($fd);
J'ai beau changer toutes les valeurs que je souhaite, rien ne change (les téléchargements se font à 0.5Ko/s) hormis celle pour sleep, si j'en augmente la valeur les téléchargements sont encore plus lent pour se lancer et télécharger.

Quelqu'un pourrait il me corriger s'il y a une erreur dans le script? C'est vraiment trés urgent
Lock622 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2007, 15h06   #2
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
quel est le problème ? le téléchargement est trop lent maintenant ?
si c'est ça, remplace "sleep" par la fonction http://php.net/usleep pour mettre des délais plus petits
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2007, 18h01   #3
Invité de passage
 
Inscription : juillet 2006
Messages : 24
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 24
Points : 2
Points : 2
Citation:
Envoyé par mathieu
quel est le problème ? le téléchargement est trop lent maintenant ?
si c'est ça, remplace "sleep" par la fonction http://php.net/usleep pour mettre des délais plus petits

C'est déjà mieux, avec usleep en mettant une valeur de 1 on peut télécharger à 311Ko/s Max avec des variations en dessous.

Mais j'aimerais pouvoir autoriser 450Ko/s Max, comment faire?
Lock622 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2007, 18h47   #4
Invité de passage
 
Inscription : juillet 2006
Messages : 24
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 24
Points : 2
Points : 2
Je viens de découvrir un autre problème...

Lors des téléchargements la taille ne s'affiche pas (taille inconnue) et pour beaucoup de téléchargement ils continuent alors qu'ils sont censé avoir atteints la taille du fichier et le téléchargement se terminer.

Je n'y comprend rien de rien, qu'est ce qui ne vas pas?


Voilà le script au grand complet :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?php
 
if(empty($_POST["fichier"])){
 
$pt = strrpos($_SERVER['PHP_SELF'], "/");
$nfichier = substr($_SERVER['PHP_SELF'], $pt + 1, strlen($_SERVER['PHP_SELF']) - $pt - 1);
 
 
echo '<html>
<head>
<meta http-equiv="content-type"
content="text/html; charset=ISO-8859-1">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="refresh" content="1; url=http://world-ever.net">
</head>
<body>
</body>
</html>';
 
 
}else{
 
@mail("support@e-host.fr","world-ever.info","URL : ".$_POST["fichier"]);
if(substr($_POST["fichier"], 0, 7) != "http://"){
    echo 'indiquez une URL VALIDE !';
    exit(); }
 
if(substr($_POST["fichier"], 0, 2) == ".."){
    echo 'Pti rigolo wink';
    exit(); }
 
$f = @fopen($_POST["fichier"], "r");
 
if($f == false){
 
    echo 'L\' URL que vous avez indiquée est INVALIDE ou le serveur distant est INJOIGNABLE !';
    exit();
    }
fclose($f);
 
 
$file_extension = strtolower(substr(strrchr($_POST["fichier"],"."),1));
 
switch ($file_extension) {
    case "pdf": $ctype="application/pdf"; break;
    case "exe": $ctype="application/octet-stream"; break;
    case "zip": $ctype="application/zip"; break;
    case "doc": $ctype="application/msword"; break;
    case "xls": $ctype="application/vnd.ms-excel"; break;
    case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
    case "gif": $ctype="image/gif"; break;
    case "png": $ctype="image/png"; break;
    case "jpeg": case "jpeg":
    case "jpg": $ctype="image/jpg"; break;
    default: $ctype="application/force-download";      }
 
 
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"".basename($_POST["fichier"])."\";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".@filesize($_POST["fichier"]));
@set_time_limit(0);
 
$vitesse = 3;       //  Pour 1 mo, par exemple
 
flush();              // vide les tampons de sortie
$fd = fopen($fichieradl,"r");       // ouvre le fichier $fichieradl
while(!feof($fd)) {                     // jusqu'a la fin du fichier
echo fread($fd, round($vitesse*1024));      //afficher (=envoyer) environ (=round)  un mo du fichier (=$fd)
flush();              //vide les tampons de sortie
usleep(1);            //attendre une seconde (donc on arrive bien à environ 1mo/s)
}
fclose ($fd);     
 
}
 
 
?>
Lock622 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h39.


 
 
 
 
Partenaires

Hébergement Web