PHP vérification taille image
TRUNCKS
Messages postés
1066
Statut
Membre
-
TRUNCKS Messages postés 1066 Statut Membre -
TRUNCKS Messages postés 1066 Statut Membre -
Bonjour à vous,
Je veux faire une vérification sur taille et type d'image avant upload mais la vérification sur la taille ne marche pas ( alors que sur le type oui )
J'ai fait cela:
Mon formulaire:
Je veux faire une vérification sur taille et type d'image avant upload mais la vérification sur la taille ne marche pas ( alors que sur le type oui )
J'ai fait cela:
define('FILE_EXTENSION_PHOTO', '.jpg, .png, .gif'); // ---------------------------------- // SI LE FORMULAIRE est posté : traitement // ---------------------------------- if(isset($_POST['action'])){ // ------------- // Récupération des textes associés $MAX_FILE_SIZE = intval($_POST['MAX_FILE_SIZE']); // ------------- // SI on a bien une photo uploadée : if(isset($_FILES['userfile']) && $_FILES['userfile']['size']>0) { // ------------------------------------- // 1/ GESTION DES ERREURS de la photo // ------------------------------------- // extension du fichier uploadé (en minuscule) $file_Extension = strtolower(pathinfo($_FILES['userfile']['name'],PATHINFO_EXTENSION)); // ----------------- // on verifie les restrictions sur les fichiers if (UPLOAD_ERR_OK<>0 && UPLOAD_ERR_FORM_SIZE==2) { $msgErreurPhoto .= 'Erreur <b>Photo</b> : Taille de fichier trop important ('.round($MAX_FILE_SIZE/1000000).' Mo)<br />'; echo $msgErreurPhoto; exit; } // on verifie la taille maxi elseif ($_FILES['userfile']['size'] > $MAX_FILE_SIZE) { $msgErreurPhoto .= 'Erreur <b>Photo</b> : Taille supérieure à la taille maxi autorisée ('.round($MAX_FILE_SIZE/1000000).' Mo)<br />'; echo $msgErreurPhoto; exit; } // on verifie l extension elseif ($_FILES['userfile']['size']>0 && @strpos(FILE_EXTENSION_PHOTO,$file_Extension)===false) { $msgErreurPhoto .= 'Erreur <b>Photo</b> : Ce n\'est pas un fichier valide ('.FILE_EXTENSION_PHOTO.')<br />'; echo $msgErreurPhoto; exit;
Mon formulaire:
<h1>Ajouter une image:</h1> <br /> <form action="addimage.php" method="post" enctype="multipart/form-data"> <input type="hidden" name="action" value="add" /> <input type="hidden" name="MAX_FILE_SIZE" value="5242880" /> <p>Image:<br /><input type="file" name="userfile" /></p> <br /> <p><input type="submit" name="submit" value="Envoyer" /></p> </form>
A voir également:
- PHP vérification taille image
- Comment réduire la taille d'un fichier - Guide
- Reduire taille image - Guide
- Image iso - Guide
- Verification lien internet - Guide
- Afficher taille dossier windows - Guide
2 réponses
bonjour,
concernant le type :
tu ne vérifie pas le type, tu vérifie simplement que l'extension envoyée est jpg, png ou gif
si on t'envoie un fichier quelconque en changeant l'extension au préalable, on peut envoyer n'importe quel fichier ... donc faille de sécurité
pour controler le type de fichier, il faut controler son type MIME que tu pourra recuperer avec :
ensuite concernant la taille
tu as cette variable $_POST['MAX_FILE_SIZE'] qui provient de ton formulaire, cela peut etre utile pour faire un controle avant envoi, mais ne te sert pas de cette variable pour faire ton controle apres envoi, il est tres facile de changer cette valeur, donc on pourrait envoyer des fichiers de n'importe quelle taille ...
au passage cee calcul est faux
concernant le type :
tu ne vérifie pas le type, tu vérifie simplement que l'extension envoyée est jpg, png ou gif
si on t'envoie un fichier quelconque en changeant l'extension au préalable, on peut envoyer n'importe quel fichier ... donc faille de sécurité
pour controler le type de fichier, il faut controler son type MIME que tu pourra recuperer avec :
$_FILES['userfile']['type']
ensuite concernant la taille
tu as cette variable $_POST['MAX_FILE_SIZE'] qui provient de ton formulaire, cela peut etre utile pour faire un controle avant envoi, mais ne te sert pas de cette variable pour faire ton controle apres envoi, il est tres facile de changer cette valeur, donc on pourrait envoyer des fichiers de n'importe quelle taille ...
au passage cee calcul est faux
round($MAX_FILE_SIZE/1000000),
1 Ko = 1024 octets 1 Mo = 1024 Ko 1 Go = 1024 Mo ... Donc 1 Mo = 1024 x 1024 = 1048576 octets