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

PHP & Base de données Discussion :

Erreur de téléchargement forcé de fichier [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bulgarie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Erreur de téléchargement forcé de fichier
    Bonjour, j'ai voulu creer un petit blog ou on a la possibilite de poster des fichiers, qui seront ensuite telechargeable par les autre utilisateurs.

    Mon soucis est que lors du telechargement du fichier, le fichier telecharger n'aura pas la bonne taille.

    Par exemple j'ai fait le test avec un pdf qui fesait 48ko, et quand on le telecharge, il ne fait plus que 1.4ko.

    Voici mon code pour telecharger un fichier

    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
     
    <?php
    if (isset($_GET['id']))
       {
     
             try
                {
                   $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
                   $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
                }
             catch (Exception $e)
                {
                   die('Erreur : ' . $e->getMessage());
                }
          $requete_fichier = $bdd->prepare('SELECT * FROM telechargement WHERE id = :id');
          $requete_fichier->execute(array(
                                  'id' => $_GET['id']
                               )
                         );
          while ($donnees = $requete_fichier->fetch())
                   {
                      $nom_fichier = $donnees['nom_fichier'];
                      $nom_crypte = $donnees['nom'];
                      $taille = $donnees['taille'];
                      $extension = $donnees['extension'];   
                      $nom_absolu = 'uploads/'.$nom_crypte.'';                  
                      $nom_fichier_crypte_avec_extension = $nom_absolu . $extension;
                   }
     
     
     
          switch( $extension )
          {
               case "pdf": $ctype="application/pdf"; break;
               case "exe": $ctype="application/octet-stream"; break;
               case "zip": $ctype="application/zip"; break;
               case "doc": $ctype="application/msword"; break;
               case "xls": $ctype="application/vnd.ms-excel"; break;
               case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
               case "gif": $ctype="image/gif"; break;
               case "png": $ctype="image/png"; break;
               case "jpeg":
               case "jpg": $ctype="image/jpg"; break;
               case "mp3": $ctype="audio/mpeg"; break;
               case "wav": $ctype="audio/x-wav"; break;
               case "mpeg":
               case "mpg":
               case "mpe": $ctype="video/mpeg"; break;
               case "mov": $ctype="video/quicktime"; break;
               case "avi": $ctype="video/x-msvideo"; break;
            }
     
          //Création des headers, pour indiquer au navigateur qu'il s'agit d'un fichier à télécharger
             header("Content-Transfer-Encoding: binary"); //Transfert en binaire (fichier)
             header("Content-Length: $taille"); //Taille du fichier
             header("Content-type: $ctype");
             header("Content-Disposition: attachment; filename= $nom_fichier"); //Nom du fichier
     
     
          //Envoi du fichier dont le chemin est passé en paramètre
             readfile($nom_fichier_crypte_avec_extension);
     
       $requete_fichier->closeCursor();
       }
     
    ?>
    Merci si quelqu'un peux m'aider?

  2. #2
    Membre averti Avatar de Nheo_
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 323
    Points : 416
    Points
    416
    Par défaut
    Citation Envoyé par graymi Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
             header("Content-Disposition: attachment; filename= $nom_fichier");
    Bonjour,

    A première vu il y à déjà un soucis ici (ton filename sera égal à "$nom_fichier" et non ce que contient la variable, essaye comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
             header("Content-Disposition: attachment; filename=".$nom_fichier);

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bulgarie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    J'ai essaye, mais ce n'est pas ca le probleme. Cela ne change rien, mais merci quand meme.

  4. #4
    Membre averti Avatar de Nheo_
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 323
    Points : 416
    Points
    416
    Par défaut
    Quand un fichier à un poids si faible au téléchargement, c'est souvent du à une erreur de nom, de lien vers le fichier.

    Je vais essayer de voir ce qui pourra clocher .

    En tout cas ce que je t'ai dit reste valable, même si ça ne résout pas le soucis.

  5. #5
    Membre averti Avatar de Nheo_
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 323
    Points : 416
    Points
    416
    Par défaut
    Citation Envoyé par graymi Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
             header("Content-Length: $taille"); //Taille du fichier
             header("Content-type: $ctype");
    Mêmes erreurs, remplace par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
             header("Content-Length:".$taille); //Taille du fichier
             header("Content-type:".$ctype);
    On sait jamais ...

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bulgarie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci de ton conseil, mais malheuresement cela ne fonctionne toujours pas, et je ne comprend pas pourquoi

  7. #7
    Membre averti Avatar de Nheo_
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 323
    Points : 416
    Points
    416
    Par défaut
    Honnêtement j'ai du mal à voir ce qui ne va pas non plus. J'avais eu ce genre de soucis, le seul conseil que je peux te donner c'est d'afficher toutes tes variables (taille, nom, type), juste avant l'envoi des headers. Regarde si ça correspond bien avec ce qu'il est censé y avoir.

    Sinon, met ton script complet que je puisse le tester, car à première vu je ne vois pas d'autres erreurs de syntaxe.

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bulgarie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Peux etre...
    Peux etre que si l'erreur vient du fichier upload??

    Voici mon 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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    <?php
    	if (!is_dir(uploads)) 
    		{
    			mkdir('uploads', 0777, true);
    		}
    	else
    		{
    				if ($_FILES['mon_fichier']['error'] > 0) 
    					{
    						$erreur = 'Erreur lors du transfert';
    					}
    				else
    					{
     
    						$titre = htmlspecialchars($_POST['titre']);
    						$maxsize = 2097152;
     
    						if ($_FILES['mon_fichier']['size'] > $maxsize)
    							{
    								$erreur = 'Le fichier est trop gros';
    							}
    						else
    							{
    								$extensions_valides = array('jpg','jpeg','gif','png', 'doc', 'pdf', 'exe', 'zip', 'xls', 'ppt', 'mp3', 'wav', 'mpeg', 'mpg', 'mpe', 'mpe', 'mov', 'avi');
     
    								//1. strrchr renvoie l'extension avec le point (« . »).
    								//2. substr(chaine,1) ignore le premier caractère de chaine.
    								//3. strtolower met l'extension en minuscules.
    								$extension_upload = strtolower(  substr(  strrchr($_FILES['mon_fichier']['name'], '.'),1));
     
    								if (in_array($extension_upload,$extensions_valides))
    									{
    									$nom_fichier = $_FILES['mon_fichier']['name'];
    									$nom_crypte = md5(uniqid(rand($nom_fichier), true));
    									$nom_absolu = 'uploads/'.$nom_crypte.'';
    									$resultat = move_uploaded_file($_FILES['mon_fichier']['tmp_name'],$nom_absolu);
     
     
     
    											{
    											// ON REALISE LA CONNEXION A LA BASE DE DONNEE
    											try
    											{
    												$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    												$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
    											}
    											catch (Exception $e)
    											{
    													die('Erreur : ' . $e->getMessage());
    											}
    											// ON INSERE LES un id, le nom(hache et unique), le titre(remplis dans le formulaire et la taille du fichier DANS LA BASE DE DONNEE
    											$ajout_fichier = $bdd->prepare('INSERT INTO telechargement(nom_fichier, nom, titre, taille, extension, date_fichier) VALUES (:nom_fichier, :nom, :titre, :taille, :extension,  NOW())');
    											$ajout_fichier->execute(array(
    																			'nom_fichier' => $nom_fichier,
    																			'nom' => $nom_crypte,
    																			'titre' => $titre,
    																			'extension' => $extension_upload,
    																			'taille' => $_FILES['mon_fichier']['size']
    																			)
    																	) or die (print_r($ajout_billet->errorInfo()));
     
    											header('Location: download.php');
    											}
    										else
    											{
    												echo 'Echec du transfert';
    											}
    									}
     
    								else
    									{
    										echo 'Extension incorect,';
    									}
    							}
    					}
    		}	
    ?>

  9. #9
    Membre averti Avatar de Nheo_
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 323
    Points : 416
    Points
    416
    Par défaut
    Pour vérifier si ton fichier est uploadé, va dans ton dossier uploads et regarde si tu peux ouvrir le fichier.

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bulgarie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Finalement j'ai reussi, l'erreur ete que je upload les fichier en crypte sans l'extension. Et quand je voulais les charger, je rajouter l'extension a la suite, mais j'oubliais le point

    par exemple arbrepdf au lieu de arbre.pdf

    En tout cas merci pour ton aide

  11. #11
    Membre averti Avatar de Nheo_
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 323
    Points : 416
    Points
    416
    Par défaut
    Citation Envoyé par graymi Voir le message
    Finalement j'ai reussi, l'erreur ete que je upload les fichier en crypte sans l'extension. Et quand je voulais les charger, je rajouter l'extension a la suite, mais j'oubliais le point

    par exemple arbrepdf au lieu de arbre.pdf

    En tout cas merci pour ton aide
    De rien, bonne journée .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.4] Erreur au téléchargement de gros fichiers
    Par Jarodd dans le forum Langage
    Réponses: 19
    Dernier message: 05/07/2014, 18h50
  2. Erreur au téléchargement de fichiers
    Par tissard dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 13/03/2008, 09h20
  3. Problème avec le téléchargement forcé d'un fichier
    Par sunshine33 dans le forum Langage
    Réponses: 14
    Dernier message: 08/11/2006, 10h24
  4. téléchargement forcé, taille du fichier nulle
    Par manaboko dans le forum Langage
    Réponses: 8
    Dernier message: 30/11/2005, 11h45

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