begin process at 2010 02 10 17:41:55
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > CLASS PHP 5 POUR CHARGEMENT ET REDIMENSIONNEMENT D'IMAGES (SI NÉCÉSSAIRE, POUR LES FORMATS SUPPORTÉS PAR LA GD: GIF, JPEG, PNG)

CLASS PHP 5 POUR CHARGEMENT ET REDIMENSIONNEMENT D'IMAGES (SI NÉCÉSSAIRE, POUR LES FORMATS SUPPORTÉS PAR LA GD: GIF, JPEG, PNG)


 Information sur la source

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Class et Objet ( POO ) Classé sous :classphp5, upload, chargement, redimensionnement, images Niveau :Initié Date de création :28/01/2006 Date de mise à jour :06/02/2006 13:05:43 Vu / téléchargé :7 731 / 680

Auteur : f bnkcm

Ecrire un message privé
Site perso
Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

 Description

Comme le titre le dit, cette class sert pour charger (upload) et redimensionner les images ( seul les format gif, jpeg et png supportés par la librairie GD, pour le redimensionnement).
Ce que vous aurez à faire c'est de spécifier quelques paramètres: taille_max, largeur et hauteur, extensions et formats autorisés, un préfixe et un sufixe ou un nouveau nom, puis le répertoire ou dossier où serait stocké l'image et voilà!
Soyez indulgents, c'est ma première class en PHP 5 ( eh oui, je vous rejoins moi aussi ;P )et donc des critiques constructives pour améliorer le code sont les bienvenues

Source

  • <?php
  • ////////////////////////////////////////////////////////////////////////////////////////\
  • //
  • // Nom du code : Class PHP 5 pour chargement des imager + redimensionnement
  • // Date de création : 27 / 01 / 2006
  • // Auteur : FBNKCMaster <-|| Farid BEN KACEM ||->
  • // E-mail : FBNKCMaster@hotmail.com
  • //
  • // |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  • //
  • // ENJOY IT!!!
  • //
  • /////////////////////////////////////////////////////////////////////////////////////////\
  • /////////////////////////////////////////////////////////////////////////////////////////\
  • class charger
  • {
  • // On déclare les constantes
  • const DEFAULT_LARGEUR = 140;
  • const DEFAULT_HAUTEUR = 140;
  • const DEFAULT_NV_NOM = '';
  • const DEFAULT_PREFIX = 'pref_';
  • const DEFAULT_SUFFIX = '_suff';
  • const DEFAULT_NOM_CHAMPS = 'file';
  • const DEFAULT_DESTINATION = '.';
  • const DEFAULT_TAILLE_MAX = 102400; // en octet 100 * 1024 = 100 Ko
  • // Les attribus
  • private $nom_champs; // Repertoire de destination
  • private $destination; // Repertoire de destination
  • private $taille_max; // Taille maximale de l'image
  • private $type_aut; // Tableau contenant les types d'image autorisés
  • private $type; // Type du fichier encours
  • private $ext_aut; // Tableau contenant les noms des extensions autorisés
  • private $largeur; // Largeur de l'image
  • private $hauteur; // Hauteur de l'image
  • private $nv_nom; // Nouveau nom
  • private $ext; // L'extension du fichier uploadé
  • private $pref; // Prefixe à ajouter
  • private $suff; // Sufixe à ajouter
  • function __construct($array)
  • {
  • $this->largeur = self::DEFAULT_LARGEUR;
  • $this->hauteur = self::DEFAULT_HAUTEUR;
  • $this->nv_nom = self::DEFAULT_NV_NOM;
  • $this->pref = self::DEFAULT_PREFIX;
  • $this->suff = self::DEFAULT_SUFFIX;
  • $this->nom_champs = self::DEFAULT_NOM_CHAMPS;
  • $this->destination = self::DEFAULT_DESTINATION;
  • $this->taille_max = self::DEFAULT_TAILLE_MAX;
  • $this->type_aut = array('1', '2', '3'); // Types d'image autorisés: 1 = GIF, 2 = JPG, 3 = PNG...
  • $this->ext_aut = array('gif', 'jpg', 'png', 'bmp'); // Les extensions autorisées
  • if(isset($array) && is_array($array))
  • {
  • foreach($array as $c => $v)
  • {
  • $this->$c = $v;
  • }
  • }
  • }
  • function executer()
  • {
  • if($this->existe() === false)
  • {
  • throw new Exception('Il n\'y a pas de fichier à charger!');
  • }
  • if($this->extension() === false)
  • {
  • throw new Exception('Ce type de fichier n\'est pas autorisé!');
  • }
  • if($this->type() === false)
  • {
  • throw new Exception('Ce type de fichier n\'est pas autorisé!');
  • }
  • if($this->poids() === false)
  • {
  • throw new Exception('Le poid de l\'image est supérieur à '.($this->taille_max/1024).' Ko');
  • }
  • if($this->dim() === false)
  • {
  • if($this->redim() === false)
  • {
  • throw new Exception('La largeur/hauteur de l\'image est grande!');
  • }
  • }
  • else
  • {
  • if($this->copier() === false)
  • {
  • throw new Exception('Erreur lors de la copie du fichier');
  • }
  • }
  • }
  • function existe()
  • {
  • // D'abord on vérifie si le fichier existe, s'il est uploadé en mémoire
  • // Si le fichier existe dans le dossier tmp...
  • if(!empty($_FILES[$this->nom_champs]['tmp_name']) && is_uploaded_file($_FILES[$this->nom_champs]['tmp_name']))
  • {
  • return true;
  • }
  • else
  • {
  • // Sinon on affiche l'erreur
  • return false;
  • }
  • }
  • function extension()
  • {
  • // On récupère l'extension
  • $this->ext = substr(strrchr($_FILES[$this->nom_champs]['name'], '.'), 1);
  • // Et on vérifie si elle figure parmis les extensions autorisées
  • if(!empty($this->ext) && in_array($this->ext, $this->ext_aut))
  • {
  • return true;
  • }
  • else
  • {
  • // Sinon on affiche l'erreur
  • return false;
  • }
  • }
  • function type()
  • {
  • // On vérifie maintenant le type de l'image à l'aide de la fonction getimagesize()
  • list($largeur, $hauteur, $this->type) = getimagesize($_FILES[$this->nom_champs]['tmp_name']);
  • // Si le $this->type de l'image figure parmis ceux autorisés
  • if(in_array($this->type, $this->type_aut))
  • {
  • return true;
  • }
  • else
  • {
  • // Sinon: "Le type de fichier est incorrect!!", on affiche l'erreur
  • return false;
  • }
  • }
  • function poids()
  • {
  • //On vérifie la taille (le poids) du fichier avec "filesize()" pour plus de sécurité encore
  • if(filesize($_FILES[$this->nom_champs]['tmp_name']) < $this->taille_max)
  • {
  • return true;
  • }
  • else
  • {
  • // Sinon on affiche l'erreur
  • return false;
  • }
  • }
  • function dim()
  • {
  • // On vérifie maintenant les dimensions de l'image à l'aide de la fonction getimagesize()
  • list($largeur, $hauteur) = getimagesize($_FILES[$this->nom_champs]['tmp_name']);
  • if($largeur <= $this->largeur && $hauteur <= $this->hauteur)
  • {
  • return true;
  • }
  • else
  • {
  • // Sinon on affiche l'erreur
  • return false;
  • }
  • }
  • function redim()
  • {
  • //On essaye de redimensionner
  • // On vérifie d'abord si la librairie GD est activée
  • if(extension_loaded('gd'))
  • {
  • // Si oui, on lance la méthode pour redimensionner
  • // Calcule des nouvelles dimensions
  • list($largeur_orig, $hauteur_orig) = getimagesize($_FILES[$this->nom_champs]['tmp_name']);
  • // Un peu des mathématiques...
  • if($largeur_orig > $this->largeur || $hauteur_orig > $this->hauteur)
  • {
  • if($largeur_orig >= $hauteur_orig)
  • {
  • $coef = $largeur_orig / $hauteur_orig;
  • $largeur = $this->largeur;
  • $hauteur = ceil($this->hauteur / $coef);
  • }
  • else
  • {
  • $coef = $hauteur_orig / $largeur_orig;
  • $hauteur = $this->hauteur;
  • $largeur = ceil($this->largeur / $coef);
  • }
  • }
  • else
  • {
  • $largeur = $this->largeur;
  • $hauteur = $this->hauteur;
  • }
  • // Redimensionnement
  • //copie avec la fonction "imagejpeg" pour le format jpg, "imagepng" pour les png et "imagegif" pour les gif. Les formats les plus utilisés et qui sont supportés par la gd
  • // $this->renommer(): cette méthode retourne le nouveau nom s'il est mentionné sinon retourne le nom original
  • switch ($this->type)
  • {
  • case 1 :
  • $image_finale = imagecreatetruecolor($largeur, $hauteur);
  • $image_orig = imagecreatefromgif($_FILES[$this->nom_champs]['tmp_name']);
  • imagecopyresized($image_finale, $image_orig, 0, 0, 0, 0, $largeur, $hauteur, $largeur_orig, $hauteur_orig);
  • if(!@imagegif($image_finale, $this->destination.'/'.$this->renommer()))
  • {
  • // Si c'est pas réussi on affiche l'erreur
  • return false;
  • }// Sinon le fichier a été uploadé et redimensionné correctement!!
  • break;
  • case 2 :
  • $image_finale = imagecreatetruecolor($largeur, $hauteur);
  • $image_orig = imagecreatefromjpeg($_FILES[$this->nom_champs]['tmp_name']);
  • imagecopyresized($image_finale, $image_orig, 0, 0, 0, 0, $largeur, $hauteur, $largeur_orig, $hauteur_orig);
  • if(!@imagejpeg($image_finale, $this->destination.'/'.$this->renommer()))
  • {
  • // Si c'est pas réussi on affiche l'erreur
  • return false;
  • }// Sinon le fichier a été uploadé et redimensionné correctement!!
  • break;
  • case 3 :
  • $image_finale = imagecreatetruecolor($largeur, $hauteur);
  • $image_orig = imagecreatefrompng($_FILES[$this->nom_champs]['tmp_name']);
  • imagecopyresized($image_finale, $image_orig, 0, 0, 0, 0, $largeur, $hauteur, $largeur_orig, $hauteur_orig);
  • if(!@imagepng($image_finale, $this->destination.'/'.$this->renommer()))
  • {
  • // Si c'est pas réussi on affiche l'erreur
  • return false;
  • }// Sinon le fichier a été uploadé et redimensionné correctement!!
  • break;
  • }
  • }
  • }
  • function copier()
  • {
  • // On copie le fichier dans le répertoire de destination
  • // $this->renommer(): cette méthode retourne le nouveau nom s'il est mentionné sinon retourne le nom original
  • if(!@move_uploaded_file($_FILES[$this->nom_champs]['tmp_name'], $this->destination.'/'.$this->renommer()))
  • {
  • // Erreur lors de la copie..
  • //throw new Exception('Erreur lors de la copie du fichier');
  • return false;
  • }// Sinon le fichier a été uploadé correctement
  • }
  • function renommer()
  • {
  • // On renomme le fichier si le nouveau nom est fourni sinon on laisse
  • ($this->nv_nom == '')?$this->nv_nom = $_FILES[$this->nom_champs]['name']:$this->nv_nom = $this->nv_nom.'.'.$this->ext;
  • // On récupère le nom du fichier sans l'extension
  • list($nom_sans_ext, $ext) = explode('.', $this->nv_nom);
  • // On ajoute le sufixe s'il est mentionné
  • ($this->suff == '')?$this->nv_nom = $this->nv_nom:$this->nv_nom = $nom_sans_ext.$this->suff.'.'.$this->ext;
  • // On ajoute le préfixe s'il est mentionné
  • ($this->pref == '')?$this->nv_nom = $this->nv_nom:$this->nv_nom = $this->pref.$this->nv_nom;
  • return $this->nv_nom;
  • }
  • }
  • ?>
<?php
 ////////////////////////////////////////////////////////////////////////////////////////\ 
//
//    Nom du code        :  Class PHP 5 pour chargement des imager + redimensionnement
//    Date de création :  27 / 01 / 2006
//    Auteur                  : FBNKCMaster <-|| Farid BEN KACEM ||->
//    E-mail                   : FBNKCMaster@hotmail.com  
//
//    |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
//
//                                          ENJOY IT!!!
//
/////////////////////////////////////////////////////////////////////////////////////////\
/////////////////////////////////////////////////////////////////////////////////////////\

class charger
{
	// On déclare les constantes
	const DEFAULT_LARGEUR = 140;
	const DEFAULT_HAUTEUR = 140;
	const DEFAULT_NV_NOM = '';
	const DEFAULT_PREFIX = 'pref_';
	const DEFAULT_SUFFIX = '_suff';
	const DEFAULT_NOM_CHAMPS = 'file';
	const DEFAULT_DESTINATION = '.';
	const DEFAULT_TAILLE_MAX = 102400; // en octet 100 * 1024 = 100 Ko
	
	// Les attribus
	private $nom_champs; // Repertoire de destination
	private $destination; // Repertoire de destination
	private $taille_max; // Taille maximale de l'image
	private $type_aut; // Tableau contenant les types d'image autorisés
	private $type; // Type du fichier encours
	private $ext_aut; // Tableau contenant les noms des extensions autorisés
	private $largeur; // Largeur de l'image
	private $hauteur; // Hauteur de l'image
	private $nv_nom; // Nouveau nom
	private $ext; // L'extension du fichier uploadé
	private $pref; // Prefixe à ajouter
	private $suff; // Sufixe à ajouter
	
	function __construct($array)
	{
		$this->largeur = self::DEFAULT_LARGEUR;
		$this->hauteur = self::DEFAULT_HAUTEUR;
		$this->nv_nom = self::DEFAULT_NV_NOM;
		$this->pref = self::DEFAULT_PREFIX;
		$this->suff = self::DEFAULT_SUFFIX;
		$this->nom_champs = self::DEFAULT_NOM_CHAMPS;
		$this->destination = self::DEFAULT_DESTINATION;
		$this->taille_max = self::DEFAULT_TAILLE_MAX;
		$this->type_aut = array('1', '2', '3'); // Types d'image autorisés: 1 = GIF, 2 = JPG, 3 = PNG...
		$this->ext_aut = array('gif', 'jpg', 'png', 'bmp'); // Les extensions autorisées
		
		if(isset($array) && is_array($array))
		{
			foreach($array as $c => $v)
			{
				$this->$c = $v;
			}
		}
	}
	
	function executer()
	{
		if($this->existe() === false)
		{
			throw new Exception('Il n\'y a pas de fichier à charger!');
		}
		
		if($this->extension() === false)
		{
			throw new Exception('Ce type de fichier n\'est pas autorisé!');
		}
		
		if($this->type() === false)
		{
			throw new Exception('Ce type de fichier n\'est pas autorisé!');
		}
		
		if($this->poids() === false)
		{
			throw new Exception('Le poid de l\'image est supérieur à '.($this->taille_max/1024).' Ko');
		}
		
		if($this->dim() === false)
		{
			if($this->redim() === false)
			{
				throw new Exception('La largeur/hauteur de l\'image est grande!');
			}
		}
		else
		{
			if($this->copier() === false)
			{
				throw new Exception('Erreur lors de la copie du fichier');
			}
		}
	}
	
	function existe()
	{
		// D'abord on vérifie si le fichier existe, s'il est uploadé en mémoire
		// Si le fichier existe dans le dossier tmp...
		if(!empty($_FILES[$this->nom_champs]['tmp_name']) && is_uploaded_file($_FILES[$this->nom_champs]['tmp_name']))
		{
			return true;
		}
		else
		{
			// Sinon on affiche l'erreur
			return false;
		}
	}
	
	function extension()
	{
		// On récupère l'extension
		$this->ext = substr(strrchr($_FILES[$this->nom_champs]['name'], '.'), 1);
		// Et on vérifie si elle figure parmis les extensions autorisées
		if(!empty($this->ext) && in_array($this->ext, $this->ext_aut))
		{
			return true;
		}
		else
		{
			// Sinon on affiche l'erreur
			return false;
		}
	}
	
	function type()
	{
		// On vérifie maintenant le type de l'image à l'aide de la fonction getimagesize()
		list($largeur, $hauteur, $this->type) = getimagesize($_FILES[$this->nom_champs]['tmp_name']);
		
		// Si le $this->type de l'image figure parmis ceux autorisés
		if(in_array($this->type, $this->type_aut))
		{
			return true;
		}
		else
		{
			// Sinon: "Le type de fichier est incorrect!!", on affiche l'erreur
			return false;
		}
	}
	
	function poids()
	{
		//On vérifie la taille (le poids) du fichier avec "filesize()" pour plus de sécurité encore
		if(filesize($_FILES[$this->nom_champs]['tmp_name']) < $this->taille_max)
		{
			return true;
		}
		else
		{
			// Sinon on affiche l'erreur
			return false;
		}
	}
	
	function dim()
	{
		// On vérifie maintenant les dimensions de l'image à l'aide de la fonction getimagesize()
		list($largeur, $hauteur) = getimagesize($_FILES[$this->nom_champs]['tmp_name']);

		if($largeur <= $this->largeur && $hauteur <= $this->hauteur)
		{
			return true;
		}
		else
		{	
				// Sinon on affiche l'erreur
				return false;
		}
	}
	
	function redim()
	{
		//On essaye de redimensionner
		// On vérifie d'abord si la librairie GD est activée
		if(extension_loaded('gd'))
		{
			// Si oui, on lance la méthode pour redimensionner
			// Calcule des nouvelles dimensions
			list($largeur_orig, $hauteur_orig) = getimagesize($_FILES[$this->nom_champs]['tmp_name']);
			// Un peu des mathématiques...
			if($largeur_orig > $this->largeur || $hauteur_orig > $this->hauteur) 
			{
				if($largeur_orig >= $hauteur_orig)
				{
					$coef = $largeur_orig / $hauteur_orig;
					$largeur = $this->largeur;
					$hauteur = ceil($this->hauteur / $coef);
				}
				else
				{
					$coef = $hauteur_orig / $largeur_orig;
					$hauteur = $this->hauteur;
					$largeur = ceil($this->largeur / $coef);
				}
			}
			else
			{
				$largeur = $this->largeur;
				$hauteur = $this->hauteur;
			}	
				// Redimensionnement
				//copie avec la fonction "imagejpeg" pour le format jpg, "imagepng" pour les png et "imagegif" pour les gif. Les formats les plus utilisés et qui sont supportés par la gd
				// $this->renommer(): cette méthode retourne le nouveau nom s'il est mentionné sinon retourne le nom original
			switch ($this->type)
			{
				case 1 :
					$image_finale = imagecreatetruecolor($largeur, $hauteur);
					$image_orig = imagecreatefromgif($_FILES[$this->nom_champs]['tmp_name']);
					imagecopyresized($image_finale, $image_orig, 0, 0, 0, 0, $largeur, $hauteur, $largeur_orig, $hauteur_orig);
						if(!@imagegif($image_finale, $this->destination.'/'.$this->renommer()))
						{
							// Si c'est pas réussi on affiche l'erreur
							return false;
						}// Sinon le fichier a été uploadé et redimensionné correctement!!
				break;
	
				case 2 :
					$image_finale = imagecreatetruecolor($largeur, $hauteur);
					$image_orig = imagecreatefromjpeg($_FILES[$this->nom_champs]['tmp_name']);
					imagecopyresized($image_finale, $image_orig, 0, 0, 0, 0, $largeur, $hauteur, $largeur_orig, $hauteur_orig);

					if(!@imagejpeg($image_finale, $this->destination.'/'.$this->renommer()))
					{
						// Si c'est pas réussi on affiche l'erreur
						return false;
					}// Sinon le fichier a été uploadé et redimensionné correctement!!
				break;
	
				case 3 :
					$image_finale = imagecreatetruecolor($largeur, $hauteur);
					$image_orig = imagecreatefrompng($_FILES[$this->nom_champs]['tmp_name']);
					imagecopyresized($image_finale, $image_orig, 0, 0, 0, 0, $largeur, $hauteur, $largeur_orig, $hauteur_orig);
	
					if(!@imagepng($image_finale, $this->destination.'/'.$this->renommer()))
					{
						// Si c'est pas réussi on affiche l'erreur
						return false;
					}// Sinon le fichier a été uploadé et redimensionné correctement!!
				break;
			}
		}
	}

	function copier()
	{
		// On copie le fichier dans le répertoire de destination
		// $this->renommer(): cette méthode retourne le nouveau nom s'il est mentionné sinon retourne le nom original
		if(!@move_uploaded_file($_FILES[$this->nom_champs]['tmp_name'], $this->destination.'/'.$this->renommer()))
		{
			// Erreur lors de la copie..
			//throw new Exception('Erreur lors de la copie du fichier');
			return false;
		}// Sinon le fichier a été uploadé correctement
	}

	function renommer()
	{
		// On renomme le fichier si le nouveau nom est fourni sinon on laisse
		($this->nv_nom == '')?$this->nv_nom = $_FILES[$this->nom_champs]['name']:$this->nv_nom = $this->nv_nom.'.'.$this->ext;
		// On récupère le nom du fichier sans l'extension
		list($nom_sans_ext, $ext) = explode('.', $this->nv_nom);
		// On ajoute le sufixe s'il est mentionné
		($this->suff == '')?$this->nv_nom = $this->nv_nom:$this->nv_nom = $nom_sans_ext.$this->suff.'.'.$this->ext;
		// On ajoute le préfixe s'il est mentionné
		($this->pref == '')?$this->nv_nom = $this->nv_nom:$this->nv_nom = $this->pref.$this->nv_nom;
		return $this->nv_nom;
	}
}
?>

 Conclusion

////////////// Exemple d'utilisation //////////////

---------- page charger.html ---------

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transition al.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<t itle>
CLASS CHARGER IMAGES AVEC REDIMENSION
</title>
</head>
<body>
<div align="center">
<form action="charger.php" method="post" enctype="multipart/form-data">
<input type="file" name="fichier" />
<br />
<input type="submit" value="Envoyer" />
</form>
</div>
</body>
</html>

--------- - page charger.php ---------

<?php
require_once('charger.class.php') ;
// On prépare les paramètres pour les faire passer
$nom_champs = 'fichier'; // le nom du champs
$nv_nom = 'fbnkcmaster'; // nouveau nom pour renommer
$pref = 'abc_'; // prefixe à ajouter
$suf = '_01'; // sufixe à ajouter
// Sous forme d'un tableau
$array = array('nom_champs'  => $nom_champs, 'nv_nom' => $nv_nom, 'pref' => $pref, 'suf' => $suf);
// On instancie la classe
// $charger = new charger(); pour laisser les paramètres par défauts
$charger = new charger($array);
// gestion des Exceptions try... catch...
try
{
$charger->executer();
echo 'L\'image a été chargée avec succès!';
}
catch(Exception $e)
{
echo $e->getMessage();
}
?>

////////////////////////// /////////////////////

Vos suggestions et commentaires sont les bienvenus.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

28 janvier 2006 16:54:23 :
-Utilisation des Exceptions try{} catch(){} -Réduction du nombre de paramètres passés
06 février 2006 12:37:54 :
Optimisation du code...
06 février 2006 13:05:46 :
petite rectification (&& à la place de AND oublié...)

 Sources du même auteur

Source avec Zip Source avec une capture FLASHANTIFLOOD SANS GD (BASIQUE)
Source avec Zip Source avec une capture ANTI FLOOD SANS LA LIBRAIRIE GD
Source avec Zip Source avec une capture 2F_SONDAGE
Source avec Zip NEWS DÉFILANTES PAR CATEGORIE
Source avec Zip NEWS DÉFILANTES

 Sources de la même categorie

Source avec Zip POO - LOGGING PACKAGE par Waredan
POO - OBJECT CLASS par Waredan
Source avec Zip POO - FACTORY CLASS par Waredan
POO - SINGLETON CLASS par Waredan
POO - PARAMETERHOLDER CLASS par Waredan

 Sources en rapport avec celle ci

UPLOAD + AFFICHAGE ET SUPPRESSION DU CONTENU D'UN DOSSIER (I... par mondherclubiste
Source avec Zip UPLOAD IMAGES POUR FORUMS ET SITES MUTUALISÉS (AJAX + PHP + ... par hartley
Source avec Zip Source avec une capture MOO! PHOTO UPLOADER par vega11
Source avec Zip UPLOAD PHOTO AVEC REDIMENT. PIXELS, KB, ... par Bouillou2
Source avec Zip FONCTION GÉNÉRIQUE DE REDIMENSIONNEMENT D'IMAGE par malalam

Commentaires et avis

Commentaire de malalam le 28/01/2006 11:04:42 administrateur CS

Hellp,

rapidement, pas trop le temps là : quelques imperfections.
Tes switch sur le type sont inutiles. Et répétitifs. Tu aurais pu créer une propriété privée, un tableau, avec pour clef, le type renvoyé par la fonction getimagsiez, et valeur, le type sous forme de chaine : 'png', 'gif'...cela t'aurait épargné quelques lignes de code.

Pareil pour les messages d'erreurs, tu aurais dû les définir dans les propriétés de ta classe, sous forme de tableau, ou de constantes, comme tu veux. Un tableau avec comme clef la valeur du switch que tu fais, et clef, le message d'erreur. Ca t'aurait encore épargné quelques lignes de code inutiles.

Pourquoi avoir rendu toutes tes propriétés publiques...?
En l'améliorant, je pense que ça peut devenir une classe utile et intéressante :-) Mais il faut mieux la penser. Avec une classe parente abstraite par exemple, et une classe fille pour chaque 'type' d'image. Tu réduirais sérieusement ton code, il serait plus clair.

Commentaire de FhX le 28/01/2006 13:19:11

Bon, comme c'est du PHP5.. il faut utiliser les exceptions !! C'est pas pour rien :)

Throw new Exception('Message d\'erreur !');
C'est pas compliqué en plus niveau utilisation !! !!

Par contre, j'aime pas ton instanciation de ta classe. Tu fais en sorte que celui qui va utiliser ta classe va faire exactement le tableau que tu lui demandes.
Hors, il y a trop de paramètres à passer d'un coup !

Par exemple : $type_aut. Il faut la mettre dans la classe elle-même ! Pas besoin de l'appeler hors classe ! A la limite créer une méthode pour pouvoir modifier ca... pourquoi pas ! Mais certainement pas lors de l'instanciation !
Pareil pour le préfixe et le suffixe ===> dans la classe ca !

Bref, c'est encore un peu trop lourd pour moi ! :)

Commentaire de f bnkcm le 28/01/2006 16:47:21

Salut,
Merci pour vos critiques, je prendrai ça en considération, par contre, malalam, j'ai pas trop compris ce que tu suggères ici:
"Tu aurais pu créer une propriété privée, un tableau, avec pour clef, le type renvoyé par la fonction getimagsiez, et valeur, le type sous forme de chaine : 'png', 'gif'...cela t'aurait épargné quelques lignes de code."
Puis, pour "Pourquoi avoir rendu toutes tes propriétés publiques...?", là j'ai besoin un peu plus d'orientation sur l'utilisation de private, public, protected... merci de bien m'éclaircir ce point, je suis à l'écoute ^_^
FhX => Tout à fait d'accord avec toi pour le "trop de paramètres" à faire passer, sinon pas pour le préfixe et suffixe, ceux là je préfère les garder comme ça (pour un renommage dynamique nom_01.jpg, nom_02.jpg... tu vois).
Merci, je vais modifier.

Commentaire de FhX le 28/01/2006 18:39:54

Justement, si tu veux faire un renommage dynamique, tu t'y prends mal.

L'instanciation doit être le moment où tu charges tes paramètres. Pas la où tu exécutes le code à proprement parler.
Pour pouvoir exécuter du code normalement, tu dois passer par une méthode à part.
Hors toi, tu fais : instanciation => redimensionnement direct.

C'est pas comme ca qu'il faut faire, tu dois séparer les deux.

Voila pourquoi tu as trop de paramètres d'ailleurs dans tes méthodes. D'ailleurs, ta classe est plus un concentré de fonctions purs plutôt que d'un code orienté objet :)
C'est aussi pour cela que je le trouve lourd (bien plus qu'un code OO :p)

Commentaire de f bnkcm le 29/01/2006 09:48:52

FhX => J'ai réglé ça avant ta deuxième réponse ^^, instanciation avec peu de paramètres à part et execution à part:
// $charger = new charger(); pour laisser les paramètres par défauts
$charger = new charger($array);
// gestion des Exceptions try... catch...
try
{
   $charger->existe();
   echo 'L\'image a été chargée avec succès!';
}
catch(Exception $e)
{
   echo $e->getMessage();
}

Merci.

Commentaire de babid le 29/01/2006 17:10:18

Merci beaucoup, très utile comme class.

Commentaire de GRenard le 02/02/2006 00:27:48

On m'a demandé de commenter cette classe :)

La première chose qui marque, c'est bien le $array qui n'est pas très convivial dans le constructeur.
Tu peux utiliser des const DEFAULT_LARGEUR = 140; par exemple pour spécifier tes valeurs par défaut.
Au sujet des "options" de tableau comme ca, essaies de faire comme PHP... Une clé et une valeur que tu vas chercher l'information avec foreach.
Ainsi tu vas faire un truc comme foreach($array as $key => $val) ........ $this->$key = $val; (avec une vérification au préalable pour ne pas écrire n'importe quoi dans ta classe... comme un isset) -> donc plus besoin de else, mettre les self::DEFAULT_ au début.
Même chose pour les types d'image autoriser... faire une énumération avec const... TYPE_GIF = 1;, TYPE_JPG = 2;, TYPE_JPEG = 2;...
Je ne sais pas si tu sais mais le AND n'a pas la même précédence que &&... (OR aussi)

Ta classe dépend de $_FILES['fichier'] et ne devrait pas... ce 'fichier' devrait être passé en paramètre quelque part.
Utilise les === et les !== pour une meilleure compréhension de code et une meilleure rapidité.

Tes méthodes ne font que ce suivre et ca ne veut pas dire grand chose... existe, extension, type, poids, executer... c'est pas une très bonne technique tout ça... Il faudrait plutôt dans exécuter faire un checkPoids, checkType, check...

Bah voilà c'est déjà ça :)

Commentaire de f bnkcm le 06/02/2006 12:41:09

Merci BABID.
Merci GRanard pour les idées, j'ai modifié le code et c'est plus optimisé là.
Merci à tous!
++

Commentaire de djshaker le 13/02/2006 15:51:43

Petite amélioration à éffectué.. quand tu donne une largeur ou une hauteur fixe, il se base sur la largeur ou hauteur d'origine pour redimensionner => les proportions ne sont pas conservé.

Bon courage.
www.orlinz.com

Commentaire de tyim le 01/09/2007 14:49:31

J'ai modifié la partie pour modifier la taille de la photo :

     function redim()
     {
     //On essaye de redimensionner
     // On vérifie d'abord si la librairie GD est activée
     if(extension_loaded('gd'))
     {
     // Si oui, on lance la méthode pour redimensionner
     // Calcule des nouvelles dimensions
     list($largeur_orig, $hauteur_orig) = getimagesize($_FILES[$this->nom_champs]['tmp_name']);
     // Un peu des mathématiques...
     if($largeur_orig > $this->largeur || $hauteur_orig > $this->hauteur)
     {
// ORIGINE
//if($largeur_orig >= $hauteur_orig)
//{
// $coef = $largeur_orig / $hauteur_orig;
// $largeur = $this->largeur;
// $hauteur = ceil($this->hauteur / $coef);
// }
//else
//{
// $coef = $hauteur_orig / $largeur_orig;
// $hauteur = $this->hauteur;
// $largeur = ceil($this->largeur / $coef);
// }
///

//code modifié
if($largeur_orig >= $hauteur_orig)
{
$coef = $this->largeur / $largeur_orig;
$largeur = $this->largeur;
$hauteur = ceil($hauteur_orig * $coef);
}
else
{
$coef = $this->hauteur / $hauteur_orig;
$hauteur = $this->hauteur;
$largeur = ceil($largeur_orig * $coef);
}
}
    else
{
$largeur = $this->largeur;
$hauteur = $this->hauteur;
}


PAR CONTRE,
J'ai un souci avec mon hébergeur free : la class ne fonctionne pas.
C'est un problème avec les exeptions.

voici le message d'erreur :
Parse error: syntax error, unexpected '{' in /mnt/152/sda/1/d/sortirfute/objet/fiche_modif_img1.inc.php on line 29

voici le code :
28- try
29- {
30- $ext=$charger->executer();

Est ce un problème de librairie ou de version php ?
Est ce que vous avez une solution pour corriger le problème ?


Merci.

Commentaire de suziesuzy961 le 18/02/2008 16:40:20 8/10

Bonjour,

pour une newbie dans la POO, je trouve cette classe excellente : le code est facile à lire et à prendre en main ! Suffisamment flexible pour l'adapter à mes besoins.

Un grand merci !!

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

upload d'images [ par psychodingue ] salut tout le monde,moi j'ai un gros prob.J'ai fait un site pour une entreprise qui vend du matos info, et donc dedant y'a une administration pour ajo upload images php 4 [ par mariuscesar ] salut , j'ai un pb svp. en fait mon hénergeur est passé à php 4.3.6 et je n'arrive pas à uploader les fichiers comme au paravent. ke faire ??? upload d'images [ par G_ki_aime_pas_le_php ] Salut à tous!G un petit problème j'essaie d'uploader un fichier et ça fonctionne pas.G TOUT essayé j'en ai marre!Est ce que quelqu'un aurait la soluti Probleme upload page html et dossier des images de la page [ par dejanom70 ] Salut a tous,je voudrais savoir comment je pourrais envoyer une page html et toutes les images qui vont avec sur un serveur ftp en un seul coup. Je sa Variable dans une URL [ par L0rD59 ] Bonjours j'ai un petit souci avec une variable et une URLje vous explique le contexte J'ai une fichier PHP qui permet d'upload des image (grace au bou Upload , nom d'image, BDD mysql [ par Grumo ] Bonjour &#224; tous,voil&#224; je me suis constitu&#233; un petit formulaire me permettant&nbsp; d'uploader des images dans une bdd msql (enfin leur n Pb d'upload d'images [ par devillersdavid ] Bonjour &#224; tous,J'arrive &#224; uploader correctement certaines images sur mon site mais d'autres sont mal upload&#233;es.J'utilise le script du s Redimensionner des images lors de l'upload [ par Drazounet ] Hello &#224; tous, Je commence &#224; manipuler des images pour la premi&#232;re fois, et je trouve que c'est assez complexe... J'ai beaucoup cherch Problème de chargement d'images dans page web [ par LeilaNice ] Bonjour &#224; tous,je suis en formation et j'ai un site &#224; cr&#233;er pour mon exam. J'ai cr&#233;&#233; mon interface sous photoshop que j'ai d& wamp+upload des images [ par imaneflash ] comment faire l upload des images je veux les stocker sur mon disque dur c posssible!?


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,905 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales