forcage de telechargement, bloquage au bout de 30 sec

Petit nouveau ! | 8 Messages

28 févr. 2006, 16:21

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

Eléphant du PHP | 413 Messages

01 mars 2006, 12:11

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
--
Goeb

Petit nouveau ! | 8 Messages

01 mars 2006, 19:14

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);

?>
Modifié en dernier par lokness le 01 mars 2006, 19:18, modifié 1 fois.

Petit nouveau ! | 8 Messages

01 mars 2006, 19:18

toujours le meme probleme :cry: :cry: :cry:

Eléphant du PHP | 413 Messages

02 mars 2006, 17:58

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();
--
Goeb

Invité
Invité n'ayant pas de compte PHPfrance

04 mars 2006, 23:41

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:

Eléphant du PHP | 413 Messages

08 mars 2006, 18:19

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é.
--
Goeb