[PHP] Souci d'extension de fichiers upload
Résolu
florianlp
Messages postés
72
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
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:
Si vous avez une solution je suis preneur.
Merci d'avance
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:
- [PHP] Souci d'extension de fichiers upload
- Changer extension fichier - Guide
- Extension .bin - Guide
- Extension dat - Guide
- Extension 7z - Guide
- Explorateur de fichiers - Guide
14 réponses
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 ?
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 ?
Essayer de faire ton traitement sans ajouter ton $extension. Puis ajoute le lors de l'upload ... Tu peut toujours essayer ca
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.
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.
Alors j'ai retirer cette fonction:
Je n'ai maintenant que ça:
Code qui initialise la variable $extension:
Code qui initialise la variable $nomFichier:
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.
$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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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;
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:
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
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
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
Je prense que c'est celle ci: $extension = strrchr($nomFichier, ".");
Elle placé en dessous cette variable: $nomFichier = $_FILES["file"]["name"] ;
Merci d'avance
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)
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>";
Après
ajoute
pour t'assurer de la vraie valeur. Si tu as gardé mon code, $extension ne contient pas le point. (gif au lieu de .gif)
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)
J'ai modifier j'ai ça qui apparaît maintenant: jpgUpload ok
Mais le fichier est toujours reconnu comme inconnu.
Merci d'avance
Mais le fichier est toujours reconnu comme inconnu.
Merci d'avance
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...
$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...