IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Formulaire upload image


Sujet :

Langage PHP

  1. #1
    Invité
    Invité(e)
    Par défaut Formulaire upload image
    Bonjour,

    Je suis en train de réaliser un formulaire et j'aimerai uploader des photos avec ce nom : image_3104149U14U.jpg

    Pour cela j'ai vu la fonction uniqid(); mais impossible

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
        if( isset($_POST['upload']) ) // si formulaire soumis
    {
    $content_dir = 'uploads/'; // dossier où sera déplacé le fichier
     
        $tmp_file = $_FILES['photo1']['tmp_name'];
     
        if( !is_uploaded_file($tmp_file) )
        {
            exit("Le fichier est introuvable");
        }
     
        // on vérifie maintenant l'extension
        $type_file = $_FILES['photo1']['type'];
     
        if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'png') && !strstr($type_file, 'gif') )
        {
            exit("Le fichier n'est pas une image");
        }
        // on copie le fichier dans le dossier de destination
        $name_file = $_FILES['photo1']['name'];
     
     
     
        if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
        {
            exit("Impossible de copier le fichier dans $content_dir");
        }
     
        echo "Le fichier a bien été uploadé";
    }
    J'ai essayé de placé de cette manière : $name_file = $_FILES['photo1']['name'].uniqid(); mais impossible il m'affiche loading.png18Y474

    Où puis-je le placer ?

    Cordialement

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Utilise pathinfo() pour recuperer l'extension (le "type" fourni par l'upload n'est pas sûr).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $fileinfo = pathinfo($_FILES['photo1']['name']);
    $extension = $fileinfo['extension'];
     
     if( !in_array($extension, array('jpg', 'jpeg', 'png', 'gif') )
        {
            exit("Le fichier n'est pas une image");
        }
     
    $filename =   'image_' . uniqid() . '.' . $extension;

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Utilise pathinfo() pour recuperer l'extension (le "type" fourni par l'upload n'est pas sûr).
    Le "type" fourni par l'upload n'est pas sûr car c'est celui fourni par le navigateur et il n'est pas vérifié côté serveur. Pour autant si pathinfo() peut récupérer entre autre l'extension d'un fichier, il ne fait aucune vérification sur le type du fichier donc un fichier dont l'extension a été renommée (.pdf renommé en .png par exemple) passera le test même si ce n'est pas une image.

    Concernant la vérification que le fichier est bien une image on fait souvent un getimagesize pour être plus sûr.

    Sinon pour tous types de fichiers la méthode apparemment la plus sûre actuellement est d'utiliser finfo_file
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $finfo = finfo_open(FILEINFO_MIME_TYPE);
    $type = finfo_file($finfo, $file_temp);
    finfo_close($finfo);
    Je n'aurais pas conseillé cette méthode il y a quelques temps car elle était peu portable (pouvait fonctionner ou pas suivant le serveur) mais d'après mes derniers essais elle fonctionne maintenant (php 5.5 +) très bien autant en local wampserver que sur un mutualisé ovh.
    Et en la testant sur mon module d'upload qui permet la fragmentation, je me suis aperçu qu'elle fonctionnait également sur un fragment de fichier. Je ne connais pas les détails de son fonctionnement mais elle a donc l'air très fiable.

Discussions similaires

  1. [2.x] [Symfony 2] Upload image dans formulaire imbriqué
    Par pixel016 dans le forum Symfony
    Réponses: 7
    Dernier message: 09/01/2015, 16h23
  2. Réponses: 2
    Dernier message: 09/11/2008, 13h14
  3. formulaire upload, les images ne sont pas sauvées
    Par san1981 dans le forum Langage
    Réponses: 37
    Dernier message: 05/08/2008, 21h37
  4. Réponses: 4
    Dernier message: 29/11/2007, 13h09
  5. [Upload] Probleme upload images
    Par yveslens dans le forum Langage
    Réponses: 6
    Dernier message: 22/08/2005, 09h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo