44 votes

Comment vérifier le type de fichier téléchargé en PHP

J'ai utilisé ce code pour vérifier le type d'images,

$f_type=$_FILES['fupload']['type'];

if ($f_type== "image/gif" OR $f_type== "image/png" OR $f_type== "image/jpeg" OR $f_type== "image/JPEG" OR $f_type== "image/PNG" OR $f_type== "image/GIF")
{
    $error=False;
}
else
{
    $error=True;
}

mais certains utilisateurs se plaignent de recevoir une erreur lors du téléchargement de tout type d'images, alors que d'autres ne reçoivent aucune erreur !

Je me demandais si cela réglait le problème :

if (mime_content_type($_FILES['fupload']['type']) == "image/gif"){...

Des commentaires ?

0voto

aesede Points 97

En PHP 5.5, j'utilise cette fonction pour obtenir le type de fichier et vérifier si c'est une image :

function getFileType( $file ) {
    return image_type_to_mime_type( exif_imagetype( $file ) );
}

// Get file type
$file_type = getFileType( 'path/to/images/test.png' );
echo $file_type;
// Prints image/png
// 1. All images have mime type starting with "image"
// 2. No other non-image mime types contain string "image" in it 

Alors vous pourriez le faire :

if ( strpos( $filetype, 'image' ) !== false ) {
    // This is an image 
}

Liste complète des types de mime : http://www.sitepoint.com/web-foundations/mime-types-complete-list/

0voto

Autumn Leonard Points 373

La dernière ligne est proche. Tu peux utiliser : if (mime_content_type($_FILES['fupload']['tmp_name']) == "image/gif"){...

Dans le cas sur lequel je travaille actuellement, mon $_FILES..['type'] se présente sous la forme de "text/csv", tandis que les deux versions de mime_content_type() y finfo() (suggéré par d'autres) rapporte "text/plain.". Comme le souligne @deceze, $_FILES..['type'] n'est utile que pour savoir quel type de fichier un client pense être.

-2voto

Nasir Khan Points 19

Vous pouvez essayer ceci

$file_extension = explode('.',$file['name']);
$file_extension = strtolower(end($file_extension));
$accepted_formate = array('jpeg','jpg','png');
if(in_array($file_extension,$accepted_formate)) {           
  echo "This is jpeg/jpg/png file";
} else {
  echo $file_extension.' This is file not allowed !!';
}

-6voto

uutsav Points 359

AVERTISSEMENT la réponse suivante ne vérifie pas réellement le type de fichier. Elle ne vérifie que le nom. Elle est ne convient pas à des fins de sécurité réelle.

EDIT : N'utilisez pas cette méthode car elle ne sert à aucun contrôle de sécurité. Je laisse cette réponse ici pour que personne ne fasse la même erreur que moi en essayant ceci.


J'ai essayé ce qui suit et cela a fonctionné pour moi :

$allowed =  array('gif','png' ,'jpg', 'pdf');
$filename = $_FILES['input_tag_name']['name'];
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if(!in_array($ext,$allowed) ) {
    echo 'error';
}

Lien vers la source

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X