IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Erreur au téléchargement de gros fichiers


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Jarodd
    Profil pro
    Inscrit en
    Août 2005
    Messages
    852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 852
    Par défaut Erreur au téléchargement de gros fichiers
    Bonjour,

    J'ai un site hébergé sur un mutualisé, qui me permet de montrer à la famille des photos et des vidéos. J'ai une fonction qui leur permet de télécharger les éléments,, voici son code :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    // $file est le chemin absolu du fichier : /path/to/file.ogv
    function file_download($file)
        {
            if( headers_sent() ) {      die('Headers Sent'); }
            if (!file_exists($file)) {  die('File not found'); }
            if (!is_file($file)) {      die('File not found'); }
            if(ini_get('zlib.output_compression')) ini_set('zlib.output_compression', 'Off'); // IE
            // Infos sur le fichier
            $len = filesize($file);
            $filename = basename($file);
            // $parts          = pathinfo($fullPath);
            // $file_extension = strtolower($parts["extension"]);
            $file_extension = strtolower(substr(strrchr($filename,"."),1));
     
            // Définit le Content-Type selon le type de fichier
            switch( $file_extension ) {
                case "avi"  : $ctype="video/x-msvideo"; break;
                case "doc"  : $ctype="application/msword"; break;
                case "exe"  : $ctype="application/octet-stream"; break;
                case "gif"  : $ctype="image/gif"; break;
                case "jpg"  :
                case "jpeg" : $ctype="image/jpg"; break;
                case "mp3"  : $ctype="audio/mpeg"; break;
                case "mp4"  : $ctype="video/mp4"; break;
                case "mpeg" :
                case "mpg"  :
                case "mpe"  : $ctype="video/mpeg"; break;
                case "mov"  : $ctype="video/quicktime"; break;
                case "ogv"  : $ctype="video/ogg"; break;
                case "pdf"  : $ctype="application/pdf"; break;
                case "png"  : $ctype="image/png"; break;
                case "ppt"  : $ctype="application/vnd.ms-powerpoint"; break;
                case "wav"  : $ctype="audio/x-wav"; break;
                case "xls"  : $ctype="application/vnd.ms-excel"; break;
                case "xlsx" : $ctype="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; break;
                case "zip"  : $ctype="application/zip"; break;
     
                // Ces extensions ne doivent pas être téléchargées
                case "php":
                case "htm":
                case "html":
                case "sql":		
                case "txt": die("<b>Cannot be used for ". $file_extension ." files!</b>"); break;
     
                default: $ctype="application/force-download";
            }
     
            // Ecriture du header
            header("Cache-Control: must-revalidate, no-cache, no-store"); // HTTP/1.1
            header("Cache-Control: private, post-check=0, pre-check=0", false); // IE
            header("Content-Description: File Transfer");
            header("Content-Disposition: attachment; filename=".$filename.";");
            header("Content-Length: ".$len);
            header("Content-Transfer-Encoding: binary");
            header("Content-Type: $ctype");
            header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date dans le passé
            header("Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . " GMT"); // Date GMT
            header("Pragma: no-cache"); 
            ob_clean();
            flush();
     
            // Download file
            readfile($file);
            die();
     
        }
    Les petits fichiers sont téléchargés sans problèmes. Mais s'ils font 140 Mo ou plus, je rencontre une erreur.

    Sous Chrome :
    Cette page Web est introuvable.
    Sous Firefox :
    Fichier introuvable

    Firefox ne peut trouver le fichier à l'adresse http://xxx.

    Vérifiez la syntaxe du nom de fichier (dont le respect des minuscules/majuscules) ;
    Vérifiez si le fichier n'a pas été déplacé, renommé ou supprimé.
    Opera lance le téléchargement, mais au final j'ai entre 0 et 20 octets...

    L'hébergement est en PHP 5.4.27. Le directive memory_limit est définie à 256M, je pense que c'est suffisant (et je ne sais pas si le poids du fichier joue dans la mémoire requise pour un script ?). Edit : je doute que ce soit ça qui bloque, car en local je suis à 128M et je peux tout télécharger, même les fichiers qui font plus de 140 Mo... J'espère que que ce n'est pas Apache qui bloque, car je n'ai pas la main

    Je cherche depuis un moment et je n'arrive pas à m'en sortir, j'espère que vous pourrez m'aider.

    Merci d'avance pour vorte aide.

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 606
    Par défaut
    Dans le php.ini tu as une directive upload_max_filesize
    En mutualisé, tu ne dois pas y avoir accès.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre éclairé
    Avatar de Jarodd
    Profil pro
    Inscrit en
    Août 2005
    Messages
    852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 852
    Par défaut
    Cette directive est applicable si j'envoie un fichier sur le serveur (par un formulaire par exemple), non ?

    Ce n'est pas mon cas, je télécharge le fichier, je ne l'envoie pas.

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 421
    Par défaut
    Bien possible que cela soit une limitation d'apache. Tu auras peut-être plus de précisions avec des spécialistes de l'administration serveur.

    Sinon (je doute que tu puisse régler ce problème sans avoir la main sur l'administration du serveur), reste la solution d'héberger tes vidéos dans une page privative youtube par exemple...

  5. #5
    Membre éclairé
    Avatar de Jarodd
    Profil pro
    Inscrit en
    Août 2005
    Messages
    852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 852
    Par défaut
    J'ai demandé le déplacement du sujet en section Apache (j'espère l'avoir fait au bon endroit).

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 101
    Par défaut
    Salut,

    Readfile ne peut pas poser de problème de mémoire, à moins que tu n'ai encore une compression de sortie active.

    Vérifies que ton buffer de sortie est bien désactivé avant le readfile.

  7. #7
    Membre éclairé
    Avatar de Jarodd
    Profil pro
    Inscrit en
    Août 2005
    Messages
    852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 852
    Par défaut
    Avant le readfile je fais :
    A priori c'est suffisant pour vider le tampon de sortie ?

Discussions similaires

  1. Nginx erreur 502 sur les gros fichiers
    Par Tlams dans le forum Administration système
    Réponses: 0
    Dernier message: 19/04/2014, 12h54
  2. Téléchargement de gros fichiers depuis un Servlet
    Par Simvetanylen dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 08/06/2011, 15h24
  3. [MySQL] Erreur de téléchargement forcé de fichier
    Par graymi dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 03/05/2011, 14h00
  4. Téléchargement de gros fichiers et segmentation
    Par SpaceFrog dans le forum Langage
    Réponses: 5
    Dernier message: 21/11/2009, 15h39
  5. Téléchargement de gros fichier avec IE
    Par amans dans le forum IE
    Réponses: 0
    Dernier message: 03/07/2009, 10h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo