[PHP] Souci d'extension de fichiers upload

Résolu
florianlp Messages postés 72 Date d'inscription   Statut Membre Dernière intervention   -  
 Utilisateur anonyme -
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
 
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   Statut Membre Dernière intervention   16
 
Essayer de faire ton traitement sans ajouter ton $extension. Puis ajoute le lors de l'upload ... Tu peut toujours essayer ca
0
Utilisateur anonyme
 
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   Statut Membre Dernière intervention  
 
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
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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
 
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   Statut Membre Dernière intervention  
 
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
 
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   Statut Membre Dernière intervention  
 
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
 
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   Statut Membre Dernière intervention  
 
Effectivement j'ai retirer les points et sa fonctionne merci à vous !
0
Utilisateur anonyme
 
de rien :)
0