Problème vérification taille image

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème vérification taille image

Re: Problème vérification taille image

par TRUNCKS » 19 nov. 2011, 16:17

Merci pour ce lien :)

Re: Problème vérification taille image

par moogli » 19 nov. 2011, 14:43

Regarde dans la doc de php la gestion des erreurs, si tu dépasse la taille max, c'est indiqué dans le champ error de $_FILES['fichier'].

j'ai fait un quelque chose ici relatant la chose (liste non exhaustive).

@+

Re: Problème vérification taille image

par TRUNCKS » 17 nov. 2011, 11:38

Résolu apparemment :(

C'était le filesize qui faisait merder.

En l'enlevant:

if (filesize($_FILES['userfile']['tmp_name']) > 2097152)

Cela marche nickel.
Il y a moyen du coup de faire la comparaison avec la taille max du php.ini pour afficher aussi un message d'erreur au lieu qu'il ne fasse rien ?

Re: Problème vérification taille image

par TRUNCKS » 16 nov. 2011, 19:31

Oui :(

Je vous donne ce que j'ai fais, en gros, il me saute la vérification de la taille de l'image.
Si jamais l'image est plus grosse, il m'affiche le message d'erreur disant qu'il n'y a pas d'image.
Je crois qu'il y a des erreurs dans les if et les else mais je suis un peu paumé :(
( Je referais la vérification des formats, j'aimerai vraiment savoir pourquoi je n'arrive pas à contrôler la taille :( )

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 (filesize($_FILES['userfile']['size']) > 2097152) {
		$msgErreurPhoto .= 'Erreur <b>Photo</b> : Taille de fichier trop important (2 Mo Maximum)<br />';
		$traiterPhotoOK = 'NON';
	}
	// 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 />';
		$traiterPhotoOK = 'NON';

	}
	elseif ($traiterPhotoOK=='NON' && $msgErreurPhoto!='') {
		$msgErreurPhoto .= 'Impossible d\'enregistrer le fichier.';
	}
		else {
	$traiterPhotoOK ='OK';
	
	}
		
	// -------------------------------------
	// 2/ si pas d'erreur : TRAITEMENT
	// -------------------------------------
	if ($traiterPhotoOK=='OK')
	{
		// -------------
		// dossiers
		$uploaddir 		= $_SERVER['DOCUMENT_ROOT']."admin/bibliographie/images/";
		$uploaddir2 	= $_SERVER['DOCUMENT_ROOT']."admin/bibliographie/images/mini/";
		// -------------
	// nom de la photo
		$nFile			= htmlspecialchars(stripslashes(trim($_FILES['userfile']['name'])), ENT_NOQUOTES, 'UTF-8');
		// remplacement (caracteres accentués, espace)
		$avec_accent 	= utf8_decode("ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÒÓÔÕÖŒØÙÚÛÜÝàáâãäåæçèéêëìíîïðòóôõöùúûüýÿÑñŠšœ '²|',;:!¿/(){}[]+=*~<>&¢€£\$¤¥§©ø÷×µ¶®°±¨@#");
		$sans_accent 	= utf8_decode("abcdefghijklmnopqrstuvwxyzAAAAAAACEEEEIIIIOOOOOOOUUUUYaaaaaaaceeeeiiiioooooouuuuyynnsso--------------------------------------------");
		$nFile			= strtr(utf8_decode($nFile), $avec_accent, $sans_accent);
		$nFile			= utf8_encode($nFile);
		$nFile			= mysql_real_escape_string($nFile); // (pour enregistrement en Bdd)
		
		// -------------
		// on enregistre la photo originale
		move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir.$nFile);
		// -------------
		// on COPIE la photo originale (pour le picto, avant redimensionnement)
		$redimPHOTOOK800 = fctredimimage(800, 0, '', '', $uploaddir, ''.$nFile);
		copy($uploaddir.$nFile, $uploaddir2.$nFile);
		// redimensionnement/enregistrement du picto
		$redimPHOTOOK150 = fctredimimage(200, 0, '', '', $uploaddir2, ''.$nFile);
		// -------------
		$sq = "INSERT INTO images_bibliographie VALUES(''images/$nFile','images/mini/$nFile')"; 
		$quer = mysql_query($sq) or die('erreur sq: '.mysql_error());
		// -------------
		// message de validation
		$msgvalidPhoto 	= 'La photo a été uploadée';
	} // fin TRAITEMENT Photo
  }
  else{ 
  
$traiterPhotoOK ='NON'; 
 
echo '<center>'.'<br/>'.'<p style="color:#ff0000;font-weight:bold;">Vous devez charger une image pour pouvoir continuer</p>'.'</center>';
  }
} // fin traitement
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Ajouter une image</title>

<link href="../style.css" rel="stylesheet" type="text/css"/>

</head>

<body>

<center>
 
<?php
// ---------------------------------
// Traitement OK : message de validation
// ---------------------------------
if($traiterPhotoOK=='OK') 
{
	
echo '<br/>'.'<p style="color:#ff0000;font-weight:bold;">Image correctement ajoutée à la base de données</p>'."<br/><br/><a href=\"addimage.php\">Ajouter une nouvelle image</a>"."<br/><br/><a href=\"gestion_images.php\">Revenir à l'accueil</a>";
exit;
}
// ---------------------------------
// Affichage du FORMULAIRE
// ---------------------------------
elseif($traiterPhotoOK=='NON') 
echo $msgErreurPhoto;
{
?>

		<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>
    
<?php
} // fin formulaire
?>

Re: Problème vérification taille image

par moogli » 16 nov. 2011, 16:10

le var_dump() ?

Re: Problème vérification taille image

par TRUNCKS » 16 nov. 2011, 14:44

J'ai ceci quand l'image est trop grande:

Warning: filesize() [function.filesize]: stat failed for 0

Et quand elle passe:

Warning: filesize() [function.filesize]: stat failed for 79308

Re: Problème vérification taille image

par moogli » 16 nov. 2011, 14:32

salut,

on va faire simple

=> l'utilisation de la recherche d'extension c'est plus que moyen, utilise un tableau + in_array

pour la taille pourquoi ne continu tu pas à utiliser $_FILES['userfile']['size'] ?

a tu essayé de les afficher ? (var_dump($_FILES['userfile']['size']); , echo filesize($_FILES['userfile']['tmp_name']); par exemple)


@+

Problème vérification taille image

par TRUNCKS » 16 nov. 2011, 14:24

Bonjour à vous,

J'essaye de faire une vérification de fichier et de taille sur un formulaire d'upload d'images.
J'ai suivi un tuto, mais la vérification de la taille ne fonctionne pas.
La vérification sur l'extention oui par contre :(

J'en suis là:
        define('FILE_EXTENSION_PHOTO', '.jpg, .png, .gif');
	$taille_ko = 1024;
	$taille_max = $taille_ko*1024;
// ----------------------------------
// 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 vérifie le poids de l'image
        if(filesize($_FILES['userfile']['tmp_name']) > $taille_max)
        {
            $msgErreurPhoto .= "Votre fichier doit faire moins de $taille_ko Ko !";
            $traiterPhotoOK = 'NON';
		}
	// 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 />';
		$traiterPhotoOK = 'NON';
	}
	elseif ($traiterPhotoOK=='NON' && $msgErreurPhoto!='') {
		$msgErreurPhoto .= 'Impossible d\'enregistrer le fichier.';
	}
		else {
	$traiterPhotoOK ='OK';
	
	}
J'ai bien le message d'erreur quand l'extention n'est pas bonne, mais pas sur la taille.
Par contre il ne le fait pas :(
Juste il ne se passe rien quand je clique sur valider et que la taille est trop grande.