PHP Téléchargement gros fichiers

Résolu/Fermé
LaurentMtns Messages postés 261 Date d'inscription mardi 22 octobre 2013 Statut Membre Dernière intervention 22 mars 2017 - Modifié par LaurentMtns le 22/02/2016 à 20:45
LaurentMtns Messages postés 261 Date d'inscription mardi 22 octobre 2013 Statut Membre Dernière intervention 22 mars 2017 - 23 févr. 2016 à 20:03
Bonsoir,

J'ai un site sur lequel mes modèles (je suis photographe amateur) peuvent télécharger leurs photos après un shooting. Étant fan de programmation depuis que je suis petit, je fais ce site entièrement moi même.

Depuis un mois j'essaye de créer un système qui permettra de télécharger l'album photo en une fois dans une archive *.RAR. La taille de ces archives est aléatoire mais presque jamais sous 100Mo (photos HD). J'utilise donc un code PHP qui envoie le fichier morceau/morceau. Le problème est que ça marche bien pour des petits fichiers mais pour les archives, elles sont toujours incomplètes.
J'ai déjà essayé plusieurs méthodes trouvées sur le net mais rien ne corrige ce problème. Je possède un hébergement mutualisé chez OVH, est-ce possible que cela vienne du serveur?

Mon code actuel :

<?php
ignore_user_abort(true);
set_time_limit(0);

// ... du code pour récupérer le nom du fichier

if (file_exists($fullPath)) {
 if ($fd = fopen ($fullPath, "rb")) {
  $fsize = filesize($fullPath);
  $path_parts = pathinfo($fullPath);
  $ext = strtolower($path_parts["extension"]);
  switch ($ext) {
   case "jpg":
   header("Content-type: image/jpeg");
   header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\"");
   break;
   default;
   header("Content-type: application/octet-stream");
   header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
   break;
    
   case "rar";
   header("Content-type: application/x-rar-compressed");
   header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\"");
   break;
   default;
   header("Content-type: application/octet-stream");
   header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
   break;
  }
  header("Content-length: $fsize");
  header("Cache-control: private");
   
  ob_end_flush();
  ob_end_clean(); //deux lignes vue sur internet
  while(!feof($fd)) {
   $buffer = fread($fd, 2048));
   echo $buffer;
   flush();
  }
 }
 fclose ($fd);
 exit;
}
?>


Merci pour vos futurs réponses.

Bonne soirée ! :)
Laurent M.

"Stand up for what you believe in even if that means standing alone." - A. Biersack
A voir également:

2 réponses

erba72 Messages postés 53 Date d'inscription mercredi 5 août 2015 Statut Membre Dernière intervention 13 novembre 2016
22 févr. 2016 à 20:48
Bonsoir, je n'y connais pas grand chose dans ce domaine pour tout dire ... Mais c'est peut être un problème de connexion internet. Si jamais le débit serait vraiment trop bas, alors il est possible que tout soit indiqué comme si tout était bien terminé et normalement. Alors que le transfert s'est arrêté et qu'il manque des fichiers.
Autrement, je ne peut pas en dire plus !

J'éspère t'avoir aidé ...

Bye
0
LaurentMtns Messages postés 261 Date d'inscription mardi 22 octobre 2013 Statut Membre Dernière intervention 22 mars 2017 51
22 févr. 2016 à 20:53
Oui c'est effectivement une possibilité bien que ma connexion ait un débit normal et que le problème se reproduit chez toutes les personnes qui testent.

Mais merci pour l'idée, je testerai à l'occasion sur une grosse connexion pour voir :-)
0
ryko1820 Messages postés 1645 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
23 févr. 2016 à 09:35
Hello,

AMHA première chose à faire, aller voir dans les logs si on retrouve un message d'erreur.
Plusieurs utilisateurs OVH se plaignent de problèmes similaires liés à une option de la configuration de PHP, voir par exemple ce fil ...
Tout dépends de ce qui se trouve dans les logs et certainement de la configuration de PHP.


0
LaurentMtns Messages postés 261 Date d'inscription mardi 22 octobre 2013 Statut Membre Dernière intervention 22 mars 2017 51
23 févr. 2016 à 16:43
Merci beaucoup ryko1820, j'ai résolut mon problème grâce au lien que tu m'as donné (dernier message de preitlinger).

Pour ceux qui possède un hébergement ovh et rencontrerait le même problème que moi, j'ai simplement ajouté ces deux lignes dans le fichier .ovhconfig se trouvant à la racine du site.

Ligne modifiée :
app.engine=phpcgi

ligne ajoutée:
app.engine.version=AUTO

ryko1820, une idée de l'impacte sur le reste du site?

Encore un graaaand merci ! :-D
0
ryko1820 Messages postés 1645 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
Modifié par ryko1820 le 23/02/2016 à 19:51
D'après ce que j'en ai compris, la manip consiste a repasser du mod_fpm qui semble être le fonctionnement par défaut des serveurs mutualisés PHP actuels chez OVH au CGI qui est, je crois, le fonctionnement "historique". Ce qui aurait surtout, une incidence sur la façon dont les process lancés par PHP sont gérés et suivis par le serveur ...
Je n'ai jamais trop creusé le sujet et je ne pourrais en dire plus, il y a certainement des répercutions importantes sur les performances en cas de montée en charge du site.
A priori en mode auto, le serveur est censé choisir le mode approprié à l'action ...
0
LaurentMtns Messages postés 261 Date d'inscription mardi 22 octobre 2013 Statut Membre Dernière intervention 22 mars 2017 51 > ryko1820 Messages postés 1645 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021
23 févr. 2016 à 20:03
Re merci pour la solution et les infos. :-)

Bonne soirée ! :-)
Laurent M.
0