PHP vérification taille image

Fermé
TRUNCKS Messages postés 1017 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 8 novembre 2024 - 16 nov. 2011 à 10:29
TRUNCKS Messages postés 1017 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 8 novembre 2024 - 16 nov. 2011 à 12:50
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:

	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:

2 réponses

maka54 Messages postés 698 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
16 nov. 2011 à 12:18
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 :
$_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 
0
TRUNCKS Messages postés 1017 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 8 novembre 2024 7
16 nov. 2011 à 12:50
Merci beaucoup pour ces précieux conseils.

Mais je ne comprend quand même pas pourquoi il saute le contrôle de la taille et passe directement au type :(
0