Upload photo avec rediment. pixels, kb, ...

Soyez le premier à donner votre avis sur cette source.

Vue 19 170 fois - Téléchargée 2 169 fois

Description

Bonjour,

Ce script permet d'uploader des photos jpg sur un serveur FTP.
L'image est automatiquement redimentionnée et compressée pour obtenir une photo finale
enregistrée sur le serveur en fonction des paramètres définits par le webmaster.
L'image est ensuite sauvée dans un dossier créé avec le pseudo (avec cookie de reconnaissance) de l'expéditeur.

Paramètres modifiables:

- Taux de compression JPG (défaut 90)
- Taille max de l'image à uploader (défaut 5Mb)
- Taille max de l'image finale(défaut 70kb)
- Largeur de la photo finale(défaut 500px)
- Mail de notification

Je suis bien sûr ouvert à tous commentaires ;o)

Bouillou

Source / Exemple :


<?
//Cookies du pseudo
//*****************

$pseudo = $_POST['pseudo'];

//Enregistre le pseudo actuel
if(($pseudo != "")&&($pseudo != "Anonyme"))setcookie ("cookie_rep", $pseudo, time()+3600*24*365); //valable 1 année

//Lecture du pseudo
$cook_rep= $HTTP_COOKIE_VARS["cookie_rep"];
if(!isset($cook_rep))$cook_rep = "Anonyme";
if($pseudo == "")$pseudo = $cook_rep;
?>

<?php 
//--------------------------------------------------------------------------------- 
// Script réalisé par Bouillou sur la base du script d'upload simple de Webdeb73
// Ajout de Bouillou: Vérification de l'existance du fichier, notification par mail,
//                    modification des droits d'accès des images (CHMOD 640 --> 644)
//                    suppression des accents, redimentionnement automatique des 
//                    dimensions et de la taille de l'image, cookies du pseudo,
//                    images classées sur le serveur par pseudo,...
// Modifié le 20/05/2006 
// Version 1.2
// http://www.jeunessebottens.com
//----------------------------------------------------------------------------------

//---------------------------- 
//  DEFINITION DES VARIABLES  
//---------------------------- 

//Pour les tester en local (avec EasyPHP,...)
$test_local = 1; //0 pour le web													//N'effectue pas la réalocation de la mémoire du serveur
																													//et n'envoi pas de mail de confirmation

$extension  = 'image/pjpeg';                              // MIME JPEG pour la comparaisond de l'extention du fichier
$extension2 = 'image/jpeg';                               // MIME JPEG pour la comparaisond de l'extention du fichier
$quality    = 90;                                         // Qualité de la compression JPEG
$kb_max     = 70000;                                      // Valeur max en octets de l'image finale
$max_size   = 5000000;                                    // Taille max en octets du fichier à uploader pour traitement 
$largeurDestination = 500;                                // Largeur max de l'image finale en pixel
$nom_rep    = "images_upload";                            // Lien du répertoire des dossier photos à la raçine du script (fin sans /)
$site       = "http://".$_SERVER["HTTP_HOST"]."/upload_avec_traitement_serveur/"; // Adresse du dossier où est installé le script (fin avec /)
$mail_notif = "mom_mail@mail.com";                        // Adresse mail pour la notification
$mail_from  = "From: info@mail.com";                      // Adresse mail envoi

//--------------------------------------------- 
//  DEFINITION DES VARIABLES LIEES AUX FICHIERS 
//--------------------------------------------- 

$nom_file     = $_FILES['fichier']['name']; 
$taille       = $_FILES['fichier']['size']; 
$tmp          = $_FILES['fichier']['tmp_name'];
$ext_img			=	$_FILES['fichier']['type'];
$lien_dossier = $nom_rep;
$nom_rep     .= "/".strtolower($pseudo);
$verif_exist  = $nom_rep;
$verif_exist .= "/";
$verif_exist .= $nom_file;
       
//---------------------- 
//  SCRIPT D'UPLOAD 
//----------------------                     

//Vérifie l'existance du dossier de réception
//*******************************************
if(!file_exists($lien_dossier))
  {
   //Crée le répertoire de classement des photos s'il n'existe pas
   if(!mkdir($lien_dossier,0755))
     {
     	echo "Impossible de créer le répertoire : ",$lien_dossier," --> upload interrompu!!!";
     	exit;
     }        
  }  
            	 
//Enlever les accents
//*******************
function enlever_accents($dest_fichier){
$dest_fichier = strtr($dest_fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ/', 
                                     'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy/');
//remplacer les caracteres autres que lettres, chiffres et point par _
$dest_fichier = preg_replace('/([^.a-z\/0-9]+)/i', '_', $dest_fichier);
return $dest_fichier;
}

$nom_rep     = enlever_accents($nom_rep);
$pseudo      = enlever_accents($pseudo);
$verif_exist = enlever_accents($verif_exist);
$nom_file    = enlever_accents($nom_file);

//Début de la procédure d'upload
//******************************       
if(!empty($_POST['posted'])) { 
    // On vérifie si le champ est rempli 
    if(!empty($nom_file) && (!empty($pseudo))) { 
      //On vérifie que le nom du fichier n'existe pas
      if(!file_exists($verif_exist)) { 
        // On vérifie l'extension du fichier 
        if(($ext_img == $extension)||($ext_img == $extension2)) { 
           // On récupère les dimensions du fichier 
           $infos_img = getimagesize($tmp); 
            // On vérifie la taille de l'image 
            if($taille <= $max_size) { 
            //Crée le répertoire avec le pseudo
            if(!file_exists($nom_rep)){
            	 mkdir($nom_rep,0755);
            	 }
               //upload du fichier
               if(move_uploaded_file($tmp,$nom_rep."/".$nom_file)) { 
                    // Si upload OK alors on affiche le message de réussite 
                    chmod($verif_exist, 0644);
                    echo "<b><font color=red>Merci $pseudo!</font></b><br><br>"; 
                    echo '<b><font color=red>Image uploadée avec succès !</font></b><br>'; 
                    echo '<hr />';
                    echo '<u>Détails de l\'image</u><br>'; 
                    echo '<b>Fichier :</b> ', $nom_file , '<br />'; 
                    echo '<b>Taille :</b> ' , $taille, ' Octets<br />'; 
                    echo '<b>Largeur :</b> ', $infos_img[0], ' px<br />'; 
                    echo '<b>Hauteur :</b> ', $infos_img[1], ' px<br />'; 
                    echo '<hr />'; 
                    
                    //calcul et redimension
                    //*********************
                    $fichierSource  = $nom_rep;
                    $fichierSource .= "/";
                    $fichierSource .= $nom_file;  
                    $fichierSource  = $fichierSource;
                    //hauteur / largeur 
                    $rapport = $infos_img[1] / $infos_img[0];
                    //Dimension de sortie
                    $hauteurDestination = $largeurDestination * $rapport; 
                    
                    if($test_local == 0)
                      {
                       //Réaloue la mémoire dont le serveur à besoin
                       //*******************************************
                       $memoryNeeded = round(($infos_img[0] * $infos_img[1] * $infos_img['bits'] * $infos_img['channels'] / 8 + Pow(2, 16)) * 1.65);
                       $mem_in_use= memory_get_usage();
                       //echo "Mémoire utilisée : $memoryNeeded contre $mem_in_use<br><br>";
                       $test = (integer) ini_get('memory_limit') + ceil(((memory_get_usage() + $memoryNeeded) - (integer) ini_get('memory_limit') * pow(1024, 2)) / pow(1024, 2)) + 1;            
                       //solution calculée
                       if(function_exists('memory_get_usage') && memory_get_usage() + $memoryNeeded > (integer) ini_get('memory_limit') * pow(1024, 2))               
                           ini_set('memory_limit', (integer) ini_get('memory_limit') + ceil(((memory_get_usage() + $memoryNeeded) - (integer) ini_get('memory_limit') * pow(1024, 2)) / pow(1024, 2)) + 2 . 'M');
                      }
                     
                    //Création de l'image
                    //*******************
                    $source = imagecreatefromjpeg($fichierSource); 
                     
                    $largeurSource = imagesx($source); 
                    $hauteurSource = imagesy($source);
                                       
                    if($largeurSource > $largeurDestination){
                       $im = ImageCreateTrueColor ($largeurDestination, $hauteurDestination)      
                            or die ("Erreur lors de la création de l'image");  
                    }
                    else{  
                       $im = ImageCreateTrueColor ($infos_img[0], $infos_img[1])
                            or die ("Erreur lors de la création de l'image");
                       $largeurDestination = $infos_img[0];
                       $hauteurDestination = $infos_img[1];     
                    }
                       
                    //Redimentionnement
                    //***************** 
                    ImageCopyResampled($im, $source, 0, 0, 0, 0, $largeurDestination, $hauteurDestination, $largeurSource, $hauteurSource);                                                                                    
                    
                    //Création du fichier de sortie
                    //*****************************
                    $fh=fopen($fichierSource,'w');
                    fclose($fh);
                    ImageJpeg ($im,$fichierSource,$quality);
                    $size_file = filesize($fichierSource);
                    
                    //Test de la taille en kb de l'image définitive
                    //*********************************************
                    $size_file = filesize($fichierSource);
                    $iteration = 0;
                    while($size_file > $kb_max){
                    	 if($quality > 0)$quality -= 5;
                    	 else {$quality = "Erreur!!!"; break;}
                       unlink($fichierSource);
                       $fh=fopen($fichierSource,'w');
                       fclose($fh);
                       ImageJpeg ($im,$fichierSource,$quality);
                       $size_file = filesize($fichierSource);
                       $iteration++;
                    }
                    
                    //Affiche le détail de l'image
                    echo '<u>Détails de l\'image finale sur le serveur</u><br>'; 
                    echo '<b>Fichier :</b> '  , $nom_file, '<br />'; 
                    echo '<b>Taille :</b> '   , $size_file, ' Octets<br />';
                    echo '<b>Qualité :</b> '  , $quality, ' %<br />'; 
                    echo '<b>Largeur :</b> '  , $largeurDestination, ' px<br />'; 
                    echo '<b>Hauteur :</b> '  , $hauteurDestination, ' px<br />';
                    echo '<b>Itération de compression :</b> ', $iteration, ' x <br />'; 
                    echo '<hr />'; 
                                       
                    $lien_image = $site.$nom_rep."/".$nom_file;                  
                    echo "L'image ci-dessous a été redimentionnée et chargée sur le serveur.<br>Un mail de notification a été envoyé aux webmasters<br><br>";
                    //echo "Lien de l'image : ".$lien_image."<br /><br />";
                    echo "<img border='0' src='".$lien_image."'><br />";
                    
                    if($test_local == 0)
                      {
                       //Envoi du mail de notification
                       $message = "Lien de l'image: ";                     
                       mail($mail_notif, "Nouvelle img uploadée de ".$pseudo,$message.$lien_image,$mail_from);  
                      }
                       
                } else { 
                    // Sinon on affiche une erreur système 
                    echo '<font color=red><b><u>ECHEC DE L\'ENVOI</u><br><br>Problème lors de l\'upload !</b><br /><br /><b>Erreur num : ', $_FILES['fichier']['error'], '</b><br /><br /></font>'; 
                }
            } else { 
                // Sinon on affiche une erreur pour les dimensions et taille de l'image 
                echo "<b>La taille du fichier dépasse la taille maximale authorisée de $max_size octets!</b><br /><br />"; 
            }    
        } else { 
            // Sinon on affiche une erreur pour l'extension 
            echo '<font color=red><b><u>ECHEC DE L\'ENVOI</u><br><br>Votre image ne comporte pas l\'extension .jpg !</b><br /><br /></font>'; 
        }
      } else {
        	  //Sinon on demande de renommer
        	  echo '<font color=red><b><u>ECHEC DE L\'ENVOI</u><br><br>Une image avec le même nom existe déjà! Renommer la photo et réessayer, Merci.</b><br /><br /></font>'; 
       } 	     
    } else { 
        // Sinon on affiche une erreur pour le champ vide 
        echo '<font color=red><b><u>ECHEC DE L\'ENVOI</u><br><br>Aucune photo sélectionnée ou aucun pseudo entré!</b><br /><br /></font>'; 
    } 
} 
?>
      
 <form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> 
 <b>Envoyer le fichier :</b><br /><br />
 <input type="hidden" name="posted" value="1" /> 
 <font color="#FFFFFF">Votre pseudo : </font><input name="pseudo" type="text" value="<?php echo $pseudo ?>" size="20" ><br><br> 

 <font color="#FFFFFF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sélectionner la photo : </font><input name="fichier" type="file"><br><br> 
 <input type="submit" value="Envoyer la photo" /> 
 </form>

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

php26
Messages postés
6
Date d'inscription
lundi 18 janvier 2010
Statut
Membre
Dernière intervention
20 janvier 2010
-
bonjour!

est ce que quelque aurait une solution pour les photos > 2MO!!
cela fait deux semaines que je tourne sans solutions!
merci par avance!!
jujudu51
Messages postés
1
Date d'inscription
vendredi 11 mai 2007
Statut
Membre
Dernière intervention
19 juin 2008
-
Bonjour !

super ce script je l'est adapter à mon site mais petit problème qui est quand même embêtant pourquoi les photos de plus de 2200px ne se redimensionne pas? en dessous ca passe niquel mais au dessus ça marche pas !
on le voit bien avec les echos puisque il n'affiche plus la taille coté serveur , la miniature etc...
Cela ne vien t'il pas de de la taille de la mémoire alloué sur le serveur ? j'ai essayer différentes manipulations envins

merci de votre aide !!!
asdr
Messages postés
9
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
21 juin 2011
-
Yep!!!
Merci beaucoup, cela va me permettre d'avancer dans mon projet de blog!!!
cs_darkcity
Messages postés
1
Date d'inscription
jeudi 23 novembre 2006
Statut
Membre
Dernière intervention
23 novembre 2006
-
Salut et félicitations pour ce script !

Maintenant j'aurais juste une question à vous poser... J'aimerai que les utilisateurs de mon site web puissent envoyer une photo qui sera redimensionnée automatiquement (jusque là ça correspond) mais en DEUX tailles différentes et dans DEUX dossiers différents.

Pour compliquer la chose, j'aimerais enlever tous les codes en rapport avec le cookie et toutes les vérification et orientation qui en résulte...

Ok, c'est un nouveau script en gros mais voilà, si quelqu'un a une idée car moi je ne parviens pas à trouver !
kubiac88
Messages postés
4
Date d'inscription
jeudi 17 mars 2005
Statut
Membre
Dernière intervention
3 décembre 2007
-
Salut,

Sympa ton script. Configurable, facile à intégrer, réutilisable. Je pense qu'il peut être bien utile pour un débutants (et pour les autres aussi tant qu'à faire). Merci bien.

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.