PHP Speed Limit

Filipe35 Messages postés 470 Date d'inscription vendredi 14 novembre 2003 Statut Membre Dernière intervention 23 octobre 2007 - 27 sept. 2005 à 17:45
Filipe35 Messages postés 470 Date d'inscription vendredi 14 novembre 2003 Statut Membre Dernière intervention 23 octobre 2007 - 2 oct. 2005 à 12:06
bonjour à tous

je désire créer un script qui limite la vitesse de téléchargement.
N'ayant pas acces auw commandes sleep

j'ai coder ce code mais il ne fonctionne pas très bien.....
Il a tendance à bugger en cours de download

pouvez vous m'aider svp

un grand merci

Filipe

Le code:
function f_telechargement($dossier,$fichier,$taille) {
/* definition des entetes */
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Cache-control: private",false);
header("Pragma: no-cache");
header("Content-Length: " . $taille);
header("Content-Type: application/force-download");
header("Content-Type: application/download",false);
header("Content-Type: application/octetstream",false);
header("Content-Type: application/octet-stream",false);
header("Content-Disposition: attachment; filename="".$fichier.""");
header("Content-transfer-encoding: binary");
header("connection: keep-alive");

$fp = fopen("$dossier/$fichier", 'rb');
$file_size = filesize ($dossier/$fichier);
$buff = file_get_contents($dossier/$fichier, 1);
$buffer = 1;
flush();
list($usec, $sec) = explode(" ",microtime());
$last_sec = $sec-5;
$speed=100000;
$limitspeed=1;
if ($limitspeed==1) {
while (!$buffer==$file_size) {
if ($last_sec==$sec) { //on a déja donné cette seconde....
} else {
$out = substr($buff, $buffer, $speed); //
print($out);
$buffer=$buffer+$speed;
$last_sec++;
}
flush();
} //end while
fclose ($fp); }
}

20 réponses

Filipe35 Messages postés 470 Date d'inscription vendredi 14 novembre 2003 Statut Membre Dernière intervention 23 octobre 2007 1
27 sept. 2005 à 17:47
oups ^^ ca c'est une autre version qui marche pas....

voici le bon qui marche

header inchangés

$fp = fopen("$dossier/$fichier", 'rb');
flush();
list($usec, $sec) = explode(" ",microtime());
$last_sec = $sec-5;
$speed=100000;
$limitspeed=1;
if ($limitspeed==1) {
while (!feof($fp)) {
if ($last_sec==$sec) {
} else {
print(fread($fp, $speed));
$last_sec++;
}
flush();
} //end while
fclose ($fp);
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
27 sept. 2005 à 18:47
Salut,



tu dois surement dépasser le max_execution_time de php.



il faut changer cette valeur dans le php.ini ou via la fonction set_time_limit() si tu es en dédié.

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
27 sept. 2005 à 18:52
salut



t'as usleep



ou t'as aussi la possibilitée de faire une boucle for, mais la, tu vas faire bosser ton hébergeur pour rien...

In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
27 sept. 2005 à 18:55
ça n'empêchera toutefois pas de passer le max_execution_time

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
27 sept. 2005 à 18:59
j'ai jamais dit le contraire, t'as tout à fait raison, sans ça, les trop gros téléchargements seront bloqués...

In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
0
Filipe35 Messages postés 470 Date d'inscription vendredi 14 novembre 2003 Statut Membre Dernière intervention 23 octobre 2007 1
27 sept. 2005 à 19:06
Merci pour vos réponses

set_time_limt(0); // ca ne marche pas :(

mais lorsque je remplacer tous mon code (sauf header) par
@readfile("$dossier/$fichier")
cela marche très bien même avec des gros fichier 15mo

les fonctions sleep sont bloquées

qu'apporterait l'utilisation d'une boucle For...

merci de siuvre mon sujet :-)

Filipe
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
27 sept. 2005 à 19:27
for ferais patienter ton script à la manière de sleep, on appelle ça
boucle de ralentissement, c'est une solution efficace pour les jeux
vidéos, mais pour les pages web, c'est dégeu ! C'est pour ça que sleep
a été créé, mais bon, si cette fonction est désactivée, alors c'est
mort...

In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
0
Filipe35 Messages postés 470 Date d'inscription vendredi 14 novembre 2003 Statut Membre Dernière intervention 23 octobre 2007 1
27 sept. 2005 à 20:06
dégue mais ca marcherai ?? :)
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
27 sept. 2005 à 20:11
essai toujours !!!!



(d'après toi, je te le dirais ou non si ça marcherais ???)

In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
0
Filipe35 Messages postés 470 Date d'inscription vendredi 14 novembre 2003 Statut Membre Dernière intervention 23 octobre 2007 1
27 sept. 2005 à 21:10
ca ne marche pas :(


$fp = fopen("$dossier/$fichier", 'rb');
flush();
list($usec, $sec) = explode(" ",microtime());
$last_sec = $sec-5;
$speed=100000;
set_time_limit(0);
$limitspeed=1;
if ($limitspeed==1) {
for (;;) {
if ($last_sec==$sec) { //ba rien tattend c'est tout
} else {
if (ftell($fp)==$taille) {break;}
print(fread($fp, $speed));
$last_sec++;
}
flush();
} //end boucle
fclose ($fp); } // dl limiter


une idée ?

merci

Filipe
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
27 sept. 2005 à 21:16
$a=0;

$fp = fopen("$dossier/$fichier", 'rb');

set_time_limit(0);

while (!feof($fp)){

$f=fgets($fp, 256);

for ($i=0;$i<1000;$i++) {$a++}

echo $f;

}

fclose ($fp); } // dl limiter


In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
0
Filipe35 Messages postés 470 Date d'inscription vendredi 14 novembre 2003 Statut Membre Dernière intervention 23 octobre 2007 1
27 sept. 2005 à 23:02
ok merci ca fonctionne, m^me si on peut pas vraiment régler la vitesse mais je vai me pencher dessus,

sur cette ligne for ($i=0;$i<1000;$i++) {$a++} // oublis pas le ;

merci je verrai ca demain

Filipe
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
28 sept. 2005 à 13:06
fais réponse accèptée stp

In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
0
Filipe35 Messages postés 470 Date d'inscription vendredi 14 novembre 2003 Statut Membre Dernière intervention 23 octobre 2007 1
28 sept. 2005 à 14:22
non marches pas :--(

le code
list($usec, $sec) = explode(" ",microtime());
$last_sec = $sec-5;
$a=0;
$fp = fopen("$dossier/$fichier", 'rb');
set_time_limit(0);
while (!feof($fp)){
$f=fread($fp, 20000);

// on attend la prochaine seconde
for (;;) {
if ($sec>$last_sec) {break;}
list($usec, $sec) = explode(" ",microtime());
}
print $f;
$last_sec++;
}

pas de soucis je ferrai réponse accéptée dès que je serrai sur la voie :D

merci de ton aide

sa bloque en plein download....

Filipe
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
28 sept. 2005 à 14:40
$a=0;

$fp = fopen("$dossier/$fichier", 'rb');

set_time_limit(0);

while (!feof($fp)){

$f=fgets($fp, 256);



list($usec, $lastsec) = explode(' ',microtime());

for (;$sec>$last_sec;) {

list($usec, $sec) = explode(' ',microtime());

}

echo $f;

}

fclose ($fp); } // dl limiter


In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
0
Filipe35 Messages postés 470 Date d'inscription vendredi 14 novembre 2003 Statut Membre Dernière intervention 23 octobre 2007 1
28 sept. 2005 à 16:28
merci de te donner tant de mal pour mon problème

le code que tu as donné marche mais il n'y a pas vraiment de "limite"
(ou vraiment j'ai rien vu )

le code
list($usec, $sec) = explode(' ',microtime());
$last_sec = $sec-5; // seconde à laquelle démarre le DL

$a=0;
$fp = fopen("$dossier/$fichier", 'rb');
set_time_limit(0);
while (!feof($fp)){
$f=fgets($fp, 256);

// attente de 1 sec
for (;$sec>$last_sec;) {
list($usec, $sec) = explode(' ',microtime());
}

$last_sec++;
// pour que cette ligne (;$sec>$last_sec;) est un "sens"
// sinon last_time sera toujours inf à sec
echo $f;
}
fclose ($fp);

ca plante tjs, je voi vraiment pas d'ou cela peut venir... as t une idée ?

merci de ton aide

Filipe
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
28 sept. 2005 à 17:06
oui j'ai une idée : tu t'emmèlles les pincaux, et tu ne teste qu'une
chose, sans relire ton code en te demandant à quoi sert cette chose...







$time=1/5; // une seconde pour un cinq ko



$fp = fopen("$dossier/$fichier", 'rb');

set_time_limit(0);

while (!feof($fp)){

$f=fgets($fp, 1024);

list($usec, $lastsec) = explode(' ',microtime());

$sec=$sec+$usec;

//dans cette boucle, on ne doit rien afficher !!!

//elle ne fait que ralentir

for (;$sec<$last_sec+$time;) {

list($usec, $sec) = explode(' ',microtime());

$sec=$sec+$usec;

}

echo $f;

}

fclose ($fp);

In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
0
Filipe35 Messages postés 470 Date d'inscription vendredi 14 novembre 2003 Statut Membre Dernière intervention 23 octobre 2007 1
2 oct. 2005 à 10:56
après avoir regardé attentivement le code, il semblerait que cela vienne d'autre chose, lorsqu'il y a un temps d'attente le téléchargement à des risques de ce bloquer.

as tu une idée sur le problème de la déconnexion ?

Merci

filipe
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
2 oct. 2005 à 11:01
combien de temps dure ton téléchargement avant de bloquer ?

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0
Filipe35 Messages postés 470 Date d'inscription vendredi 14 novembre 2003 Statut Membre Dernière intervention 23 octobre 2007 1
2 oct. 2005 à 12:06
c'est variable, des fois 10sec des fois plus d'une minute.....
0
Rejoignez-nous