Tom's Guide > Forum > Programmation > Pbl vérification type fichier dans l'envoi de fichier...
Mot :    Pseudo :           
 

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 :-?

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

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".

Répondre à milmot

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?

Répondre à smurff

pas vraiment :)

la négation d'un OR n'est pas OR mais AND.

Répondre à milmot

Citation :

"image/pjpeg"



Et si tu mettais tout simplement "image/jpeg" ??

Répondre à OmaR

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 :p

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!!

Répondre à smurff

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

Répondre à khayyam

!(a OR b) = (!a AND !b)

Répondre à milmot

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?

Répondre à milmot

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... :-?

Répondre à smurff

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

Répondre à smurff

arg!! Non en fait ça ne marche pas! ça saut carrément le if(condition des dimensions) :-(

argeulegeu!! A L'AIDE SVP!!!! ;-)

Répondre à smurff

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'];

Répondre à smurff

arg!! Non en fait ça ne marche pas! ça saut carrément le if(condition des dimensions) :-(

argeulegeu!! A L'AIDE SVP!!!! ;-)

Répondre à smurff

que valent $largeur et $hauteur lors de vos essais?

Répondre à milmot

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

Répondre à smurff

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?

Répondre à milmot

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

Répondre à smurff
Tom's Guide > Forum > Programmation > Pbl vérification type fichier dans l'envoi de fichier...
Aller à :

Il y a 1255 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens