PHP Téléchargement gros fichiers

[Résolu/Fermé]
Signaler
Messages postés
261
Date d'inscription
mardi 22 octobre 2013
Statut
Membre
Dernière intervention
22 mars 2017
-
Messages postés
261
Date d'inscription
mardi 22 octobre 2013
Statut
Membre
Dernière intervention
22 mars 2017
-
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

2 réponses

Messages postés
53
Date d'inscription
mercredi 5 août 2015
Statut
Membre
Dernière intervention
13 novembre 2016

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
Messages postés
261
Date d'inscription
mardi 22 octobre 2013
Statut
Membre
Dernière intervention
22 mars 2017
49
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 :-)
Messages postés
1645
Date d'inscription
dimanche 28 avril 2013
Statut
Membre
Dernière intervention
15 août 2021
303
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.


Messages postés
261
Date d'inscription
mardi 22 octobre 2013
Statut
Membre
Dernière intervention
22 mars 2017
49
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
Messages postés
1645
Date d'inscription
dimanche 28 avril 2013
Statut
Membre
Dernière intervention
15 août 2021
303
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 ...
Messages postés
261
Date d'inscription
mardi 22 octobre 2013
Statut
Membre
Dernière intervention
22 mars 2017
49 >
Messages postés
1645
Date d'inscription
dimanche 28 avril 2013
Statut
Membre
Dernière intervention
15 août 2021

Re merci pour la solution et les infos. :-)

Bonne soirée ! :-)
Laurent M.