[PHP] Souci d'extension de fichiers upload

Résolu/Fermé
florianlp Messages postés 72 Date d'inscription mercredi 15 février 2012 Statut Membre Dernière intervention 21 octobre 2015 - 10 août 2012 à 01:46
 Utilisateur anonyme - 11 août 2012 à 20:03
Bonjour,


J'ai un souci lors de l'upload de fichier sur mon site, lorsque le fichier a moins de 15 caractères l'extension est bonne mais quand il y a un renommage ou une coupure du nom du fichier a 15 caractères le fichier ne possederas plus son extension.

Mais dans tous les cas que le fichier garde son extension ou non le script ne reconnaît pas l'extension vu qu'il met par exemple pour une image en jpg que c'est un format inconnu.

Voilà la partie du code ou je pense que le souci se pose:

$extension=substr($extension,4) ;
                                $nomFichier =substr($nomFichier, 0, 15).strtolower($extension);
                          if (file_exists("up/$nomFichier" )) {

                          $rand = date("YmdHis");
                          $nomFichier = $rand."_".$nomFichier;

                          }
                                
                                // Ensuite, on copie le fichier uploadé ou bon nous semble.
                                $uploadOk = move_uploaded_file($nomTemporaire, $DESTINATION_FOLDER.$nomFichier);
                                if($uploadOk){



Si vous avez une solution je suis preneur.
Merci d'avance
A voir également:

14 réponses

Utilisateur anonyme
11 août 2012 à 15:11
Ce problème apparaît que depuis que j'ai mis ton code à la place de l'autre
Pourtant tu te plaignais déjà de ça dès ton premier message... Faudrait savoir.

Ton code qui affiche l'image est différent de celui qui la charge. D'où vient la variable $extension dans donc code qui affiche l'image, et qui ne reconnaît pas les extensions ?
1
lili34500 Messages postés 178 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 17 août 2012 16
10 août 2012 à 07:49
Essayer de faire ton traitement sans ajouter ton $extension. Puis ajoute le lors de l'upload ... Tu peut toujours essayer ca
0
Bonjour

Ta méthode pour tronquer le nom de fichier à 15 caractères me semble bien légère, peut-on voir le code qui initialise les variables $extension et $nomFichier ?

il met par exemple pour une image en jpg que c'est un format inconnu.
Si tu récupères en ftp le fichier que tu viens de télécharger, est-il reconnu par ton PC ? Compare-le avec celui que tu avais téléchargé pour voir s'il a été mal téléchargé ou s'il est mal analysé à la restitution.
0
florianlp Messages postés 72 Date d'inscription mercredi 15 février 2012 Statut Membre Dernière intervention 21 octobre 2015
10 août 2012 à 22:59
Alors j'ai retirer cette fonction:

$extension=substr($extension,4) ;


Je n'ai maintenant que ça:

$nomFichier =substr($nomFichier, 0, 15).strtolower($extension);
                          if (file_exists("up/$nomFichier" )) {

                          $rand = date("YmdHis");
                          $nomFichier = $rand."_".$nomFichier;

                          }
                                
                                // Ensuite, on copie le fichier uploadé ou bon nous semble.
                                $uploadOk = move_uploaded_file($nomTemporaire, $DESTINATION_FOLDER.$nomFichier);
                                if($uploadOk){


Code qui initialise la variable $extension:
$extension = strrchr($nomFichier, ".");


Code qui initialise la variable $nomFichier:
$nomFichier = $_FILES["file"]["name"] ;


Pour le moment tout fonctionne mis a part les fichiers renommés ou non renommé à moins de 15 caractères à l'origine, ces fichiers auront une double extension c'est à dire: exemple (20120810221211_aeertt.jpg.jpg)

Seriez vous d'où ça pourrait venir ?

Merci d'avance.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
10 août 2012 à 23:14
Si le nom de fichier fait moins de 15 caractères, tu ne le raccourcis pas. Donc il garde son extension. Si tu ajoutes encore l'extension, tu as deux extensions, c'est normal.
Pour limiter la longueur du nom de fichier, tu peux faire
$nomFichier = $_FILES["file"]["name"] ;
$tbl=explode('.',$nomfichier);
$extension=array_pop($tbl)
$nomFichier =substr(implode('.',$tbl),0,15).'.'.$extension;
0
florianlp Messages postés 72 Date d'inscription mercredi 15 février 2012 Statut Membre Dernière intervention 21 octobre 2015
11 août 2012 à 02:21
Au niveau de la double extension le problème est réglé je te remercie.

Mais maintenant après l'upload il y a un souci le script ne détecte pas l'extension il met que c'est inconnu, alors que sur le ftp et sur mon pc le fichier est bon, on peut le lire et l'extension est présente (.jpg).

Voici le code ou je pense que le problème se pose:
$uploadOk = move_uploaded_file($nomTemporaire, $DESTINATION_FOLDER.$nomFichier);
				if($uploadOk){

switch ($extension) {
case ".jpeg": echo "<IMG SRC='up/$nomFichier'>";break;
case ".jpg": echo "<IMG SRC='up/$nomFichier'>";break;

PS: Ce problème apparaît que depuis que j'ai mis ton code à la place de l'autre le père.

Merci d'avance
0
florianlp Messages postés 72 Date d'inscription mercredi 15 février 2012 Statut Membre Dernière intervention 21 octobre 2015
11 août 2012 à 16:02
Effectivement oui j'avais oublier ça. Autant pour moi.

Je prense que c'est celle ci: $extension = strrchr($nomFichier, ".");

Elle placé en dessous cette variable: $nomFichier = $_FILES["file"]["name"] ;

Merci d'avance
0
Utilisateur anonyme
11 août 2012 à 18:43
Excuse-moi, je n'ai pas posé la bonne question Pour comprendre pourquoi ça n'affiche pas, montre tout le script de la partie qui te dit que l'extension n'est pas reconnue (sans tes mots de passe s'il y en a dedans)
0
florianlp Messages postés 72 Date d'inscription mercredi 15 février 2012 Statut Membre Dernière intervention 21 octobre 2015
11 août 2012 à 18:49
La voici

if($uploadOk){

 

					                    echo "Upload ok<br><br>";
                                        echo "Name : $nomFichier<br>";
                                        echo "Size : $poidsFichierK Ko<br>";
					                    echo "URL du Fichier : http://*****/$nomFichier<br><br>";
										echo "Aperçu:<br><br>";
										switch ($extension) {
								        case ".jpeg": echo "<IMG SRC='up/$nomFichier'>";break;
                                        case ".bmp": echo "<IMG SRC='$nomFichier'>";break;
										case ".gif": echo "<IMG SRC='$nomFichier'>";break;
										case ".png": echo "<IMG SRC='$nomFichier'>";break;
										case ".jpg": echo "<IMG SRC='up/$nomFichier'>";break;
										case ".rar": echo "<IMG SRC='error/archive.gif'>";break;
										case ".ace": echo "<IMG SRC='error/archive.gif'>";break;
										case ".zip": echo "<IMG SRC='http://center-up.com/inc/error/archive.gif'>";break;
										case ".php": echo "<IMG SRC='error/web.gif'>";break;
										case ".htm": echo "<IMG SRC='error/web.gif'>";break;
										case ".html": echo "<IMG SRC='error/web.gif'>";break;
										case ".php3": echo "<IMG SRC='error/web.gif'>";break;
										case ".mp3": echo "<IMG SRC='error/son.gif'><bgsound src='$nomFichier'><br>Si vous utilisez internet explorer ,vous pourrez entendre votre son.";break;
										case ".wav": echo "<IMG SRC='error/son.gif'><bgsound src='$nomFichier'><br>Si vous utilisez internet explorer ,vous pourrez entendre votre son.";break;
									    default: echo "<IMG SRC='error/inconnu.gif'>"; }
										echo "<br><br>";
0
Utilisateur anonyme
11 août 2012 à 19:22
Après
if($uploadOk){

ajoute
echo $extension;

pour t'assurer de la vraie valeur. Si tu as gardé mon code, $extension ne contient pas le point. (gif au lieu de .gif)
0
florianlp Messages postés 72 Date d'inscription mercredi 15 février 2012 Statut Membre Dernière intervention 21 octobre 2015
11 août 2012 à 19:33
J'ai modifier j'ai ça qui apparaît maintenant: jpgUpload ok

Mais le fichier est toujours reconnu comme inconnu.

Merci d'avance
0
Utilisateur anonyme
11 août 2012 à 19:49
Tu as la réponse sous les yeux et tu ne la vois pas ?
$extension contient 'jpg' (sans le point) et ton switch teste '.jpg' (avec le point)
Tu as le choix entre ajouter le . au début de $extension, ou modifier toutes les variantes dans le switch pour remplacer ".gif", ".png", etc... par "gif", "png", etc...
0
florianlp Messages postés 72 Date d'inscription mercredi 15 février 2012 Statut Membre Dernière intervention 21 octobre 2015
11 août 2012 à 19:55
Effectivement j'ai retirer les points et sa fonctionne merci à vous !
0
Utilisateur anonyme
11 août 2012 à 20:03
de rien :)
0