Bonjour,
Voilà j'ai un petit problème de script, je code donc un site où on peut télécharger des fichiers allant de 1Ko à plus de 500Mo, les fichiers viennent de mon serveur mais le plus souvent ils viennent de serveurs externes.
Jusque là tout fonctionne, les fichiers passent à travers un fichier file.php, précisés par plusieurs variables GET pour désigner le fichier à télécharger, et un header est envoyé pour forcer le téléchargement, changer plusieurs variables statistiques au passage, etc.
Le gros problème, dont je ne m'étais même pas rendu compte pendant la création de ce script il y a quelques semaines, c'est qu'une fois un téléchargement lancé, l'utilisateur ne peut naviguer nul part sur mon site, les pages "chargent", et n'aboutissent à rien avant la fin du téléchargement des fichiers qui passent à travers le header (on est donc obligé d'annuler le téléchargement pour pouvoir faire quelque chose sur le site).
Après quelques tests, j'ai pu voir que cela ne touchait pas le site entier; cela concerne uniquement l'user qui télécharge, pas les autres users naviguant (ce qui est quand même une bonne nouvelle vu le contexte).
Bon évidemment vous l'imaginez, lorsqu'on télécharge un fichier de 500Mo, il faut plusieurs heures pour le finir et le fait que mon site soit complètement figé pour l'user concerné c'est très très gênant, et frustrant pour celui-ci.
J'ai cherché sur Internet et n'ai pas trouvé de cas similaire - je suppose que j'ai mal cherché - je suppose que le problème est dû au fait que le header fait passer le fichier concerné par mon site et qu'aucune autre header (donc page) ne peut être envoyé à l'user avant la fin du chargement.
Y a-t-il une solution ? Est-ce une erreur de ma part ?
Voici le code...
Je ne vois pas trop de solution, si quelqu'un pouvait me dire que c'est simplement un mauvais paramètre dans le header, ça me sauverait vraiment !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 header("Content-disposition: attachment; filename=".basename($local_file)."\n"); header("Content-Type: application/force-download\n"); header("Content-Transfer-Encoding: octet-stream\n"); // Surtout ne pas enlever le \n header("Content-Length: ".$local_file_size."\n"); header("Pragma: no-cache"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public\n"); header("Expires: 0\n"); readfile($local_file);
Merci de m'avoir lu
Partager