Page 1 sur 1

forcage de telechargement, bloquage au bout de 30 sec

Posté : 28 févr. 2006, 16:21
par lokness
salut,

j'utilise un script pour forcé le telechargement mais j'ai remarqué que le telechargement se termine au bout d'environ 30 sec alors que le fichier n'est pas fini de telechargé...

mon script:
<?php

$filename= isset($_GET['lien']) ? $_GET['lien'] : null;

header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($filename) );
header('Accept-Ranges: bytes');
header('Content-Length: '.filesize($filename));
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
header("Expires: 0");
readfile($filename);

?>
d'ou viens mon probleme ???

merci

Posté : 01 mars 2006, 12:11
par goeb
salut,
par défaut la durée maximale d'exécution d'un script PHP est de 30 s. donc au-delà, le serveur web tue l'exécution.

cette durée peut être réglée dans le php.ini ou avec la fonction set_time_limit.
http://www.php.net/manual/fr/function.s ... -limit.php

Posté : 01 mars 2006, 19:14
par lokness
ok donc mon script doit etre comme ça ?
<?php

$filename= isset($_GET['lien']) ? $_GET['lien'] : null;

header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($filename) );
header('Accept-Ranges: bytes');
header('Content-Length: '.filesize($filename));
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
header("Expires: 0");
set_time_limit (0);
readfile($filename);

?>

Posté : 01 mars 2006, 19:18
par lokness
toujours le meme probleme :cry: :cry: :cry:

Posté : 02 mars 2006, 17:58
par goeb
vu sur http://www.php.net/manual/fr/function.s ... -limit.php :

""Notez que set_time_limit() n'a pas d'effet lorsque PHP fonctionne en mode safe mode. Il n'y a pas d'autre solution que de changer de mode, ou de modifier la durée maximale d'exécution dans le php.ini.""

si tu n'as pas accès au php.ini, je ne vois pas de solution.

essaye flush() à tout hasard (je connais mal le fonctionnement à ce niveau) :
...
readfile($filename);
flush();

Posté : 04 mars 2006, 23:41
par Invité
ok merci mais d'apres mon guide, flush permet de réinitialiser des parties de la memoire cache de mysql, je vois pas bien ce que ça vient faire dans mon fichier :?

personne n'a d'idée :cry:

Posté : 08 mars 2006, 18:19
par goeb
ton guide est incomplet.
va voir : http://www.php.net/manual/fr/function.flush.php

""flush() vide les buffers de sortie de PHP et tous ceux que PHP utilisait (CGI, un serveur web, etc.). Cette fonction envoit réellement toutes les données préparées vers l'utilsateur.""


mais si ça marche pas, j'ai pas de solution, désolé.