PHP vérifier si le fichier est une image [dupliquer]

cette question a déjà une réponse ici:

y a-t-il un moyen de s'assurer qu'un fichier reçu est une image dans PHP ?

tester pour l'extension ne semble pas très sûr pour moi que vous peut télécharger un script et changer son extension à ce que vous voulez.

j'ai essayé d'utiliser getimagesize aussi, mais il pourrait y avoir quelque chose de plus approprié pour ce problème particulier.

38
demandé sur Vikalp Patel 2013-03-14 15:35:20

3 réponses

Natif de façon à obtenir le type mime:

pour PHP < 5.3 utiliser mime_content_type()

Pour PHP > = 5.3 utiliser finfo_open () ou mime_content_type ()

les Alternatives pour obtenir le MimeType sont exif_imagetype et getimagesize , mais ceux-ci dépendent de l'installation des libs appropriés. En outre, ils retournera probablement juste les mimétypes d'image, au lieu de la liste entière donnée dans magie.mime .

alors que mime_content_type est disponible à partir de PHP 4.3 et fait partie de L'extension FileInfo (qui est activé par défaut depuis PHP 5.3, sauf pour les plates-formes Windows, où il doit être activé manuellement, pour plus de détails voir ici ).

si vous ne voulez pas vous soucier de ce qui est disponible sur votre système, juste envelopper les quatre fonctions dans une méthode par procuration qui délègue l'appel de fonction à tout ce qui est disponible, par exemple

function getMimeType($filename)
{
    $mimetype = false;
    if(function_exists('finfo_open')) {
        // open with FileInfo
    } elseif(function_exists('getimagesize')) {
        // open with GD
    } elseif(function_exists('exif_imagetype')) {
       // open with EXIF
    } elseif(function_exists('mime_content_type')) {
       $mimetype = mime_content_type($filename);
    }
    return $mimetype;
}
19
répondu Dead Man 2018-06-28 16:40:27

le getimagesize () devrait être le moyen le plus précis de déterminer si le fichier est une image:

if(@is_array(getimagesize($mediapath))){
    $image = true;
} else {
    $image = false;
}

parce qu'il s'agit d'un échantillon getimagesize() sortie:

Array (
[0] => 800
[1] => 450
[2] => 2
[3] => width="800" height="450"
[bits] => 8
[channels] => 3
[mime] => image/jpeg)
59
répondu George Mickleburgh 2016-02-01 11:44:20

utilisant l'extension de fichier et la fonction getimagesize pour détecter si le fichier téléchargé a le bon format est juste le contrôle de niveau d'entrée et il peut simplement contourner en téléchargeant un fichier avec l'extension vraie et certains byte d'un en-tête d'image mais le contenu erroné.

pour être sûr et sûr vous pouvez faire la vignette/redimensionner (même avec les tailles d'image originales) l'image téléchargée et enregistrer cette version à la place de celle téléchargée. Aussi, il est possible d'obtenir le contenu de fichier téléchargé et la recherche il pour le caractère spécial comme <?php de trouver le fichier est image ou non.

10
répondu Sheen 2013-03-14 11:52:25