Pbl vérification type fichier dans l'envoi de fichier...
Forum Programmation : Pbl vérification type fichier dans l'envoi de fichier...
Bonjour à tous!!
Mon problème est que lorsque j'envoie un fichier avec mon formulaire d'upload, que ce soit une image jpg ou autre il m'affiche à TOUS les coups l'erreur disant que le fichier n'est pas une image jpg...
Aidez moi svp
voici mon code:
<?php
if(isset($_FILES["fichier"]))
{
if(isset($_FILES["fichier"])==NULL){}
else
{
$rep="fichier_kiki/"; //changer le nom du repertoire
$savefile= $rep.$_FILES['fichier']['name'];
$temp = $_FILES['fichier']['tmp_name'];
$nom_fich=$_FILES['fichier']['name'];
echo "$nom_fich<br/>";
//vérifie l'extention de l'image (jpeg ou jpg)
if($_FILES['fichier']['type'] != "image/pjpeg" )
{
echo "L'image que vous avez envoyé n'est pas au format JPG/JPEG";
}
else
{
list($largeur, $hauteur)=getimagesize($savefile); //récupère les dimensions de l'image
if($largeur!=192 OR $hauteur!=204)
{
echo "L'image ne fait pas les dimentions 192*204... Redimentionnez votre image!";
}
else //si les dimensions sont bonnes et que l'extention est bonne, il envoie sur le serveur
{
if(move_uploaded_file($temp, $savefile))
{ ?>
<p align=center><b>Vous avez bien envoyé l'image :</b></P>
<table align=center>
<tr><td>Nom :</td><td> <?echo $_FILES['fichier']['name'];?></td></tr>
<tr><td>Taille : </td><td> <?echo $_FILES['fichier']['size'];?> oct</td><td><?echo "$largeur * $hauteur"; ?></td></tr>
<tr><td>Type : </td><td> <?echo $_FILES['fichier']['type'];?></td></tr>
</table><?
}
else
{
echo "ERREUR. Fichier non transféré";
}
}
}
}
}
?>
Merci d'avance à ceux qui m'aideront :-D :-?
| Citation : "image/pjpeg" |
pjpeg?
sinon il y a toujours la bonne vieille solution de scanner le nom du fichier et de voir s'il contient la chaine ".jpg" ou ".jpeg".
oui j'ai aussi testé ça, mais apparament ça fait pareil!
le code:
if(strrchr("image.jpg","." )!=strrchr("$nom_fich","." ) OR strrchr("image.jpeg","." )!=strrchr("$nom_fich","." )) {
echo "L'image que vous avez envoyé n'est pas au format JPG/JPEG";
}
else
{.......
ça te parait bon?
pas vraiment
la négation d'un OR n'est pas OR mais AND.
| Citation : "image/pjpeg" |
Et si tu mettais tout simplement "image/jpeg" ??
pas vraiment
la négation d'un OR n'est pas OR mais AND.
en effet, j'avais pas réfléchit là dessus! Merci tu m'a enlevé un grosse épine du pied! Mais.... dsl ^^ un problème en cache un autre et c'est maintenant avec le if qui suit que ça bloque
en effet, même si l'image est aux bonne dimensions, il m'affiche le message... je suppose que c'est le moyen pour récupéré les dimensions qui est foireux... :-? Dans ce cas, aurai tu une meilleur technique à me proposer? :-P
Merci d'avance!!
| Citation : la négation d'un OR n'est pas OR mais AND. |
ça alors, je ne savais pas que 0 ou 0 était la négation de 0 et 0. J'en apprends tous les jours.
la négation de OR est .... !OR
!(a OR b) = (!a AND !b)
| Citation : en effet, même si l'image est aux bonne dimensions, il m'affiche le message |
même cause, mêmes effets
C'est quoi ce OR?
arg j'ai oublié de modifier mon code quand je vous l'ai mis, mais j'avais mis un AND (si si !)... et ça marche toujours pas :-o l'erreur revient à chaque fois... :-?
j'ai modifié le code (même avec un AND ça ne marchait pas, l'erreur revenait...) et j'ai mis ce que tu a proposé milmot :
if(!($largeur=272 OR $hauteur=204))
{
echo "L'image ne fait pas les dimentions 272*204... Redimentionnez votre image!";
}
et là ça marche! c'est bizarre! tu a pourtant dit que les 2 s'équivaut... :-o
arg!! Non en fait ça ne marche pas! ça saut carrément le if(condition des dimensions) :-(
argeulegeu!! A L'AIDE SVP!!!! ;-)
bon alors m'être renseigner j'ai un peu modifier mon code comme ça:
$size = getimagesize($temp);
$largeur=$size[0];
$hauteur=$size[1];
if($largeur!=272 AND $hauteur!=204)
{
echo "L'image ne fait pas les dimentions 272*204... Redimentionnez votre image!";
}
mais par contre ça ne marche toujours pas :-?
je pense que cela vient du $temp.... l'image est vraiment stockée là? c'est pas le nom temporaire du fichier??
$temp = $_FILES['fichier']['tmp_name'];
arg!! Non en fait ça ne marche pas! ça saut carrément le if(condition des dimensions) :-(
argeulegeu!! A L'AIDE SVP!!!! ;-)
que valent $largeur et $hauteur lors de vos essais?
bah justement ils ne vallent rien :s
J'ai alors modifier le dossier temporaire dans le php.ini pour voir si les fichiers temps apparaissaient mais non ils n'apparaissent pas :s :s :s
ça veux donc dire qu'il y a problème lors du transfert, mais pourtant, il récupère le nom du fichier avec $_FILES['fichier']['name'] (je le fait afficher sans problème).
J'ai alors de décidé de tranférer le fichier directement et après de faire joujou avec... mais ça ne marche pas, il n'apparait pas dans le dossier où il devrai!
Bref cela est bizarre et je m'en sort pas!
Je vous remet le code modifié au cas où :-?
<!--header à insérer sur toutes les pages-->
<html>
<head>
<title><?php echo "$title"; ?></title>
</head>
<body>
<FORM METHOD="POST" ENCTYPE="multipart/form-data">
<INPUT TYPE=HIDDEN NAME=MAX_FILE_SIZE VALUE=5000>
<INPUT TYPE=FILE NAME="fichier">
<INPUT TYPE=SUBMIT value="Enregistrer le fichier">
</FORM>
<?php
if(!empty($_FILES['fichier']))
{
$rep="fichier_kiki/"; //changer le nom du repertoire
$nom_fich=$_FILES['fichier']['name'];
$temp = $_FILES['fichier']['tmp_name'];
$savefile= $rep.$nom_fich;
echo "$nom_fich<br/>";
move_uploaded_file($temp, $savefile);
//vérifie l'extention de l'image (jpeg ou jpg)
if(strrchr("image.jpg","." )!=strrchr($nom_fich,"." ) AND strrchr("image.jpeg","." )!=strrchr($nom_fich,"." ) AND strrchr("image.JPG","." )!=strrchr($nom_fich,"." ) AND strrchr("image.JPEG","." )!=strrchr($nom_fich,"." )) /*$_FILES['fichier']['type'] != "image/gif"*/
{
echo "L'image que vous voullez envoyer n'est pas au format JPG/JPEG";
//unlink($savefile);
}
else
{
list($largeur, $hauteur)=getimagesize($savefile); //récupère les dimensions de l'image
/*$size_img = getimagesize($savefile);
echo "$size_img[0]";*/
if($largeur != 272 && $hauteur != 204)
{
echo "L'image ne fait pas les dimentions 272*204 pixels... Redimentionnez votre image!";
//unlink($savefile);
}
else //si les dimensions sont bonnes et que l'extention est bonne, il envoie sur le serveur
{
/*if(move_uploaded_file($temp, $savefile))
{ ?>
<p align=center><b>Vous avez bien envoyé l'image :</b></P>
<table align=center>
<tr><td>Nom :</td><td> <?echo $_FILES['fichier']['name'];?></td></tr>
<tr><td>Taille : </td><td> <?echo $_FILES['fichier']['size'];?> oct</td><td><?echo "$largeur * $hauteur"; ?></td></tr>
<tr><td>Type : </td><td> <?echo $_FILES['fichier']['type'];?></td></tr>
</table><?
}
else
{
echo "ERREUR. Fichier non transféré";
}*/
}
}
}
?>
</body>
</html>
MErci d'avance de m'aider
mon PHP étant un peu rouillé, je ne vais pas entrer dnas le détail du code mais pourquoi passer par savefile et ne pas utiliser temp?
que ce soit avec $savefile ou $temp ça ne fait rien, les variables $size_img[0] ou $largeur ne se remplissent pas quelque soit la méthode (list($largeur,$hauteur)=getimagesize($_FILES['fichier']['tmp_name']); ou $size_img = getimagesize($_FILES['fichier']['tmp_name']); echo "$size_img[0]"
Bref je n'y comprend rien :-x
Il y a 1255 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
