PHP Téléchargement gros fichiers

Résolu
LaurentMtns Messages postés 269 Date d'inscription   Statut Membre Dernière intervention   -  
LaurentMtns Messages postés 269 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention  
 
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 269 Date d'inscription   Statut Membre Dernière intervention   51
 
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 1677 Date d'inscription   Statut Membre Dernière intervention   276
 
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 269 Date d'inscription   Statut Membre Dernière intervention   51
 
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 1677 Date d'inscription   Statut Membre Dernière intervention   276
 
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 269 Date d'inscription   Statut Membre Dernière intervention   51 > ryko1820 Messages postés 1677 Date d'inscription   Statut Membre Dernière intervention  
 
Re merci pour la solution et les infos. :-)

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