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 :

Téléchargement de fichier


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 31
    Par défaut Téléchargement de fichier
    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...

    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!');
    }
    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.

    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

  2. #2
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut
    Indices :

    - Output buffering activité par default dans la conf de PHP ?
    - set_time_limit(0)

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 31
    Par défaut
    Citation Envoyé par |PaRa-BoL Voir le message
    Indices :

    - Output buffering activité par default dans la conf de PHP ?
    - set_time_limit(0)
    output_buffering = On

    maintenant ça charge sans s'arrêter, je test avec un gros fichier depuis tout à l'heure et j'attend ^^

    http://hpics.li/558edaf pour voir à quoi ça ressemble sur mon ordi

    Dernier problème, on voit absolument pas la progression, si j'arrive à regler ça, le principal sera réglé !

    Edit: output_buffering = off et je vois enfin la progression, j'avais pas eu idée de modifier alors que tu me l'avais dit ! Dernier point, y a-t-il un moyen pour mettre le output_buffering sur off juste pour cette page ? Histoire de ne pas généraliser au site, merci

  4. #4
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut
    devrait suffire.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 31
    Par défaut
    Merci beaucoup en retard

Discussions similaires

  1. Téléchargement de fichier
    Par casafa dans le forum Web & réseau
    Réponses: 21
    Dernier message: 18/06/2009, 23h34
  2. Réponses: 5
    Dernier message: 08/12/2005, 20h13
  3. Téléchargement de fichiers par HTTP / FTP
    Par Gladiator dans le forum Serveurs (Apache, IIS,...)
    Réponses: 2
    Dernier message: 07/12/2005, 11h28
  4. Réponses: 5
    Dernier message: 05/11/2005, 17h53
  5. [SOAP][XML][C#.NET] Téléchargement de fichiers XML
    Par juniorAl dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 27/06/2005, 09h35

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