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 :

[Tableaux] Comment être sûr qu'un fichier est une image


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Inscrit en
    Février 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 192
    Points : 198
    Points
    198
    Par défaut [Tableaux] Comment être sûr qu'un fichier est une image
    Bonjour,

    Je cherche à mettre à la disposition des utilisateurs la possibilité de déposer sur le serveur un fichier image (gif, jpeg...).

    Je cherche donc à savoir comment être certain qu'il s'agisse d'une image, et aussi comment connaitre la taille en pixels de cette image.

    Cordialement,

    mathias

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Regarde du coté de la fonction PHP getimagesize(). Cette fonction te retourne les dimensions de l'image, et son type.
    Dernière modification par Invité ; 27/09/2006 à 18h48.

  3. #3
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    salut
    pour etre certain que c'est une image de type valide
    bien tu peux vérifier son extension
    tu te prédéfinis un array avec les extensions valides et tu vérifie si elle est dedans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    //Si il y a un fichier d'envoyé et que le fichier est plus petit que 20Mo
    if(isset($_FILES['fichier']) && $_FILES['fichier']['size'] <= 20971520){  
    	$tmp_file = $_FILES['fichier']['tmp_name']; //Prend le nom complet du fichier uploader dans le tmp du serveur
    	$ext_possible = array('DOC','XLS','PUB','TXT','PDF','BMP','JPG','JPEG'); //extension possible
     
     
    	// Vérification de fichiers valide
    	if(!in_array(strtoupper(substr(strrchr($_FILES['fichier']['name'], '.'), 1)), $ext_possible)){
    		$msgProgress = '**Veuillez sélectionner un fichier de type valide (WORD, EXCEL, PUBLISHER, TEXTE, PDF, PHOTO BMP ou JPEG)** '.$_FILES['fichier']['name'];    
    	}
    et pour la taille en pixel...
    je n'ai pas testé la méthode de guardian mais bon j'imagine que ca fait la job

  4. #4
    Membre habitué
    Inscrit en
    Février 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 192
    Points : 198
    Points
    198
    Par défaut
    Erf...

    L'extension n'a jamais définit le type d'un fichier

    Même si effectivement nos pauvres Windows ne sont toujours pas capable de regarder ce qui doit s'appeler le "magic number" d'un fichier

    Un test rigolo est de regarder le contenu d'un répertoire contenant les fichiers récupérés par un scandisk d'abord sous Windows, on se rend compte que tous les fichiers sont foutus, puis sous Linux, et là on se rend compte que les fichiers ont été renommé, et que les zip sont toujours dézippable... Enfin pour ceux récupérés en entier bien sûr.

    Sous Linux toujours il existe une commande répondant au doux nom de "file" qui donne le type d'un fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    # vérification du type sur une image :
    babar@desktop:~$ file Images/claire1.jpg 
    Images/claire1.jpg: JPEG image data, EXIF standard
     
    # copie de l'image en changeant l'extension :
    babar@desktop:~$ cp Images/claire1.jpg claire1.fake
     
    # nouvelle vérification du type de fichier :
    babar@desktop:~$ file claire1.fake 
    claire1.fake: JPEG image data, EXIF standard
    babar@desktop:~$
    La question serait de savoir s'il existe une fonction similaire dans PHP, ce qui m'éviterai d'avoir à lancer system() ou exec() (je ne sais jamais laquelle est la mieux )

    Ceci dit, merci pour vos réponses à tous les 2 malgré tout

    a+

  5. #5
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Merci pour ces précisions.

    Dans la doc Php, j'ai trouvé ceci qui devrait te convenir

    mime-content-type()

  6. #6
    Membre habitué
    Inscrit en
    Février 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 192
    Points : 198
    Points
    198
    Par défaut
    Re erf

    Si j'avais lu l'aide PHP avant de poster la précédente réponse j'aurais pu voir que getimagesize() faisait tout ça d'un seul coup, le tableau de réponses contient dans son 3ème élément le type de l'image, sous forme numérique, et si le fichier analysé n'est pas une image il contient 0.

    a+

    Édit : Ah ouais ça marche aussi avec cette fonction, merci bien

  7. #7
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Citation Envoyé par novices
    La question serait de savoir s'il existe une fonction similaire dans PHP, ce qui m'éviterai d'avoir à lancer system() ou exec() (je ne sais jamais laquelle est la mieux )
    Essaye ça : string mime_content_type (string filename)

    Edit: Ahhh... encore trop lent !!!

  8. #8
    Membre habitué
    Inscrit en
    Février 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 192
    Points : 198
    Points
    198
    Par défaut
    "Pas assez rapide petit scarabé"

    Merci quand même

  9. #9
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut
    Copmme le dit Guardian_7 getimagesize()... si c'est pas une image il retourne false point barre... c'est beaucoups mieux que les fonctions sur les mimes type qui sont généralement expérimentale et peu sûr... .. .

    @ tchaOo°

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment savoir si un fichier est une librairie ?
    Par kkt8 dans le forum Langage
    Réponses: 7
    Dernier message: 28/02/2011, 08h20
  2. Comment être informé qu'un process est terminé ?
    Par dus dans le forum Visual C++
    Réponses: 4
    Dernier message: 22/10/2009, 10h57
  3. Comment m'assurer que mon fichier est bien un exec unix
    Par Khaled.Noordin dans le forum Apple
    Réponses: 5
    Dernier message: 05/07/2007, 18h37
  4. Comment savoir si le fichier est une image
    Par MaitrePylos dans le forum Ruby on Rails
    Réponses: 15
    Dernier message: 10/05/2007, 15h31
  5. comment être sûr qu'un fichier est une image?
    Par tomy4ever dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 11/04/2007, 17h53

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