Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/05/2011, 10h39   #1
Invité de passage
 
Homme
Étudiant
Inscription : 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 : 1
Points : 1
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 :
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?
graymi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 10h44   #2
Membre éprouvé
 
Avatar de Nheo_
 
Homme
Étudiant
Inscription : avril 2011
Messages : 317
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2011
Messages : 317
Points : 405
Points : 405
Citation:
Envoyé par graymi Voir le message
Code :
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 :
1
2
 
         header("Content-Disposition: attachment; filename=".$nom_fichier);
Nheo_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 10h47   #3
Invité de passage
 
Homme
Étudiant
Inscription : 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 : 1
Points : 1
J'ai essaye, mais ce n'est pas ca le probleme. Cela ne change rien, mais merci quand meme.
graymi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 11h20   #4
Membre éprouvé
 
Avatar de Nheo_
 
Homme
Étudiant
Inscription : avril 2011
Messages : 317
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2011
Messages : 317
Points : 405
Points : 405
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.
Nheo_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 11h22   #5
Membre éprouvé
 
Avatar de Nheo_
 
Homme
Étudiant
Inscription : avril 2011
Messages : 317
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2011
Messages : 317
Points : 405
Points : 405
Citation:
Envoyé par graymi Voir le message
Code :
1
2
3
 
         header("Content-Length: $taille"); //Taille du fichier
         header("Content-type: $ctype");
Mêmes erreurs, remplace par :

Code :
1
2
3
 
         header("Content-Length:".$taille); //Taille du fichier
         header("Content-type:".$ctype);
On sait jamais ...
Nheo_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 11h31   #6
Invité de passage
 
Homme
Étudiant
Inscription : 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 : 1
Points : 1
Merci de ton conseil, mais malheuresement cela ne fonctionne toujours pas, et je ne comprend pas pourquoi
graymi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 11h36   #7
Membre éprouvé
 
Avatar de Nheo_
 
Homme
Étudiant
Inscription : avril 2011
Messages : 317
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2011
Messages : 317
Points : 405
Points : 405
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.
Nheo_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 11h37   #8
Invité de passage
 
Homme
Étudiant
Inscription : 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 : 1
Points : 1
Par défaut Peux etre...

Peux etre que si l'erreur vient du fichier upload??

Voici mon code

Code :
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,';
									}
							}
					}
		}	
?>
graymi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 11h42   #9
Membre éprouvé
 
Avatar de Nheo_
 
Homme
Étudiant
Inscription : avril 2011
Messages : 317
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2011
Messages : 317
Points : 405
Points : 405
Pour vérifier si ton fichier est uploadé, va dans ton dossier uploads et regarde si tu peux ouvrir le fichier.
Nheo_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 12h23   #10
Invité de passage
 
Homme
Étudiant
Inscription : 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 : 1
Points : 1
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
graymi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 14h00   #11
Membre éprouvé
 
Avatar de Nheo_
 
Homme
Étudiant
Inscription : avril 2011
Messages : 317
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2011
Messages : 317
Points : 405
Points : 405
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 .
Nheo_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h32.


 
 
 
 
Partenaires

Hébergement Web