Bonjour,
en ce moment je développe un module de téléchargement de fichiers via un script PHP; evidemment rien ne marche, ou presque ! J'espère que vous saurez trouver une réponse à tout cela...
En gros j'ai un script file.php qui incorpore une variable $path (le chemin donc) et $name (le fichier), s'ensuit un code tel que celui-ci...
Vous l'aurez deviné, je cherche à déplacer les fichiers de /files/ (d'ailleurs protégé par un .htaccess "deny from all" pour éviter tout pompage de fichiers) vers /files_temp/ d'où il est téléchargé; de ce côté là j'ai l'impression que ça fait même pas ça, j'ai regardé la fonction copy() pour que ça le gère, mais peu importe ce n'est pas le vrai problème ici.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 $local_file ='serv/files/'.$path.'/'.$name; // Le fichier que vera l'user $download_file = 'serv/files_temp/[MonSite] '.$name; // le download limit (en Kbits) $download_rate = 1500; if(file_exists($local_file) && is_file($local_file)) { // send headers header('Cache-control: private'); header('Content-Type: application/octet-stream'); header('Content-Length: '.filesize($local_file)); header('Content-Disposition: filename='.$download_file); flush(); $file = fopen($download_file, "r"); while(!feof($file)) { print fread($file, round($download_rate * 1024)); flush(); sleep(1); } fclose($file); } else { die('Error: The file '.$local_file.' does not exist!'); }
Ensuite, le téléchargement a une limite de vitesse (1.5Mb ici), et dans l'idéal je voulais limiter le téléchargement à un à la fois (mais je l'ai pas encore inclus). Bref !
Le problème est que ça fait un peu n'importe quoi et je ne sais pas trop pourquoi.
En gros on clique, la page charge, charge (et en fait ça télécharge mais le navigateur s'en rend pas compte, premier gros problème ! Si un fichier fait 500MB et que l'user a une petite connexion il va croire que le script plante carrément, sans "suivi" des données téléchargées, je vois pas du tout comment régler ça déjà).
Ensuite, et de manière tout à fait arbitraire, le téléchargement ce coupe d'un coup, qu'il soit à 5Mo ou 60Mo, ça change tout le temps. 2eme gros problème donc puisque c'est pas possible de créer un service de téléchargement dans ces conditions ! Ma théorie: je met ça sur le dos d'un timeout du serveur Apache, car rappelez-vous c'est un chargement de page et pas un téléchargement concret qui est constaté, à part à la fin.
Evidemment j'ai fait des milliers de tests, j'ai enlevé le download rate, j'ai simplifié les header() au maximum, ou j'ai complexifié, j'ai même enlevé les .htaccess pour voir si ça venait de là, j'ai donc testé un peu tout: le résultat est à peu de chose prés le même. Tout téléchargement via script a le même résultat chez moi.
Je précise que je suis pour l'instant en local sur Wampserver (qui a une facheuse tendance à mal gérer les header() de mon expérience), et j'espère qu'il y a une solution à tout ça... Je suis un peu désespéré, ça fait plusieurs heures que je me penche sur ce seul problème.
Listing des problèmes:
1) Téléchargement qui a l'air d'un chargement de page, aucun suivi de la progression
2) Fichiers erronés, taille qui change tout le temps et qui n'est pas celle du vrai fichier
Je me tourne donc vers vous, en espérant que quelqu'un ai une idée, m'explique que j'ai (espérons le) mal écrit quelque chose, et que ce n'est pas un problème insoluble
Merci beaucoup à vous de m'avoir lu et de m'apporter votre aide![]()
Partager