Soyez le premier à donner votre avis sur cette source.
Vue 11 547 fois - Téléchargée 885 fois
<?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; } } ?>
18 févr. 2008 à 16:40
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 !!
1 sept. 2007 à 14:49
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.
13 févr. 2006 à 15:51
Bon courage.
www.orlinz.com
6 févr. 2006 à 12:41
Merci GRanard pour les idées, j'ai modifié le code et c'est plus optimisé là.
Merci à tous!
++
2 févr. 2006 à 00:27
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 :)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.