News Inscription Teamspeak Mumble Hébergement Serveur CS:S Charte Outils Wiki Forum Chat Contact

Clanfree.net

Forum de support de ClanFree.net

Vous n'êtes pas identifié.

#1 14-06-2008 18:46:06

K!LM@N
Goa'uld
Lieu: Nucourt
Date d'inscription: 03-07-2007
Messages: 146
Site web

Site Clanfree :
team-hrd.clanfree.net

Probleme d'upload de fichier (image)

Salut a tous
j'ai un petit problème d'upload d'image.
mon script est

Code:

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 smile

Dernière modification par K!LM@N (14-06-2008 18:46:40)


http://miniprofile.xfire.com/bg/co/type/2/kilman95.png

Hors ligne

 

14-06-2008 18:46:06

AdBot

#2 14-06-2008 20:10:42

d4RK_l1NK
Haut Commandeur Suprême Asgard
Lieu: Lille
Date d'inscription: 18-05-2007
Messages: 1091
Site web

Site Clanfree :
darklink.clanfree.net

Re: Probleme d'upload de fichier (image)

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


http://legendedelain.clanfree.net/files/smileys/cube.gif

Hors ligne

 

#3 14-06-2008 23:46:20

K!LM@N
Goa'uld
Lieu: Nucourt
Date d'inscription: 03-07-2007
Messages: 146
Site web

Site Clanfree :
team-hrd.clanfree.net

Re: Probleme d'upload de fichier (image)

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


http://miniprofile.xfire.com/bg/co/type/2/kilman95.png

Hors ligne

 

#4 15-06-2008 17:09:33

d4RK_l1NK
Haut Commandeur Suprême Asgard
Lieu: Lille
Date d'inscription: 18-05-2007
Messages: 1091
Site web

Site Clanfree :
darklink.clanfree.net

Re: Probleme d'upload de fichier (image)

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


http://legendedelain.clanfree.net/files/smileys/cube.gif

Hors ligne

 

Pied de page des forums

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson