
Forum de support de ClanFree.net
Vous n'êtes pas identifié.
Salut a tous
j'ai un petit problème d'upload d'image.
mon script est
function get_extension($nom)
{
$nom = explode(".", $nom);
$nb = count($nom);
return strtolower($nom[$nb-1]);
}
$extensions_ok = array('jpg','gif','png','jpeg');
$typeimages_ok = array(2);
$taille_ko = 1000000; // Taille en kilo octect (ko)
$taille_max = $taille_ko*1024; // En octects
$dest_dossier = '../images/site/'; // Creez ce dossier et chmoodez le !
if(isset($_FILES['photo'])) // Formulaire envoyé
{
// Les erreurs que PHP renvoi
if($_FILES['photo']['error'] !== "0")
{
switch ($_FILES['photo']['error'])
{
case 1:
$erreurs[] = "Votre image doit faire moins de $taille_ko Ko !";
break;
case 2:
$erreurs[] = "Votre image doit faire moins de $taille_ko Ko !";
break;
case 3:
$erreurs[] = "L'image n'a été que partiellement téléchargé.";
break;
case 4:
$erreurs[] = "Aucun fichier n'a été téléchargé.";
break; // Pas de 5, ne pas demander pourquoi ^^ (voir doc PHP)
case 6:
$erreur[] = "Un dossier temporaire est manquant.";
break;
case 7:
$erreurs[] = "échec de l'écriture du fichier sur le disque.";
break;
}
}
// getimagesize arrive à traiter le fichier ?
if(!$getimagesize = getimagesize($_FILES['photo']['tmp_name'])) {
$erreurs[] = "Le fichier n'est pas une image valide.";
}
// on vérifie le type de l'image
if( (!in_array( get_extension($_FILES['photo']['name']), $extensions_ok ))
or (!in_array($getimagesize[2], $typeimages_ok )))
{
foreach($extensions_ok as $text) { $extensions_string .= $text.', '; }
$erreurs[] = 'Veuillez sélectionner un fichier de type '.substr($extensions_string, 0, -2).' !';
}
// on vérifie le poids de l'image
if( file_exists($_FILES['photo']['tmp_name'])
and filesize($_FILES['photo']['tmp_name']) > $taille_max)
{
$erreurs[] = "Votre fichier doit faire moins de $taille_ko Ko !";
}
// copie du fichier si aucune erreur !
if(!isset($erreurs) or empty($erreurs))
{
$dest_fichier = basename($_FILES['photo']['name']);
$dest_fichier = strtr($dest_fichier, 'Àà ÂÃÄÅÇÈÉÊËÌà Îà ÒÓÔÕÖÙÚÛÜà à áâãäåçèéêëìÃîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
// un chtit regex pour remplacer tous ce qui n'est ni chiffre ni lettre par "_"
$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
// pour ne pas ecraser un fichier existant
while(file_exists($dest_dossier . $dest_fichier)) {
$dest_fichier = rand().$dest_fichier;
}
// copie du fichier
if(move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier)) {
$valid[] = "Image uploadée avec succès (<a href='".$dest_dossier . $dest_fichier."' target='_blank'>Voir</a>)";
} else {
$erreurs[] = "Impossible d'uploader le fichier.<br />Veuillez vérifier que le dossier ".$dest_dossier." existe avec un chmod 755 (ou 777).";
}
}
}
if(!empty($erreurs)AND $_POST['nom'] == "")
{
echo '<ul class="erreur">';
foreach($erreurs as $erreur) {
echo '<li>'.$erreur.'</li>';
}
echo '</ul>';
}
if(!empty($valid))
{
echo '<ul class="validation">';
foreach($valid as $text)
{
echo '<li>'.$text.'</li>';
}
echo '</ul>';
}c'est un script que j'ai trouver sur le net il marche bien pour les format comme le jpg ou le gif mais pour les images en png il ne marche pas il me fait cette erreure
"Veuillez sélectionner un fichier de type jpg, gif, png, jpeg !"
alors j'ai voulu voir si c'était pas le format du fichier j'ai donc fait un
"print_r($_FILES);"
et j'obtient
"Array ( [photo] => Array ( [name] => ZP.png [type] => image/png [tmp_name] => /tmp/phpipWzqZ [error] => 0 [size] => 22285 ) )"
quelqu'un pourrait m'aider svp sa serait gentil 
Dernière modification par K!LM@N (14-06-2008 18:46:40)
Hors ligne
Hello
en fait, c'est simple. Il y a, dans ton code, deux endroits où est vérifié le type de l'image. if( (!in_array( get_extension($_FILES['photo']['name']), $extensions_ok ) )
Le bout de code vérifie d'abord l'extension du fichier en récupérant ce qu'il y a aprés le '.' dans le nom du fichier, et en regardant si cette extensions est présente dans le vecteur "extensions_ok".or (!in_array($getimagesize[2], $typeimages_ok )))
par contre, il utilise aussi la fonction getImageSize pour récupérer des infos sur l'image. L'index 2 du résultat de getimagesize contient le type de l'image testée, et c'est une valeur numérique. Ton script va ensuite regarder si la valeur numérique renvoyée est dans le vecteur "typeimages_ok"
et c'est là que ça coince, car dans typeimages_ok, tu n'as que le type 2 (jpg).
il faut que tu rajoutes des types dans typeimages_ok (à l'instar des extensions que tu as rajoutées dans extensions_ok)
Voilà de quoi t'aider:
getimagesize retourne un tableau de 4 éléments. L'index 0 contient la longueur. L'index 1 contient la largeur. L'index 2 contient le type de l'image : 1 = GIF , 2 = JPG , 3 = PNG , 4 = SWF , 5 = PSD , 6 = BMP , 7 = TIFF (Ordre des octets Intel), 8 = TIFF (Ordre des octets Motorola), 9 = JPC , 10 = JP2 , 11 = JPX , 12 = JB2 , 13 = SWC , 14 = IFF . Ces valeurs correspondent aux constantes IMAGETYPE qui ont été ajoutées en PHP

Hors ligne
Ok merci je viens de trouver la repose pour ceux qui n'aurait pas trouver voila ce qu'il faut metre :
a la place de
"$typeimages_ok = array(2);"
il faut mettre les valeurs correspondantes
pour moi cela donne
"$typeimages_ok = array('1','2','3');"
Merci darklink
Hors ligne
oui voilà, tu as compris, ce sont les trois types pour avoir gif, jpg et png
sauf que moi j'aurais écrit array(1, 2, 3) sans les quote.
mais bon, php comprend ptet quand même...

Hors ligne