begin process at 2012 02 12 09:14:13
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > UPLOAD PHOTO AVEC REDIMENT. PIXELS, KB, ...

UPLOAD PHOTO AVEC REDIMENT. PIXELS, KB, ...


 Information sur la source

Note :
9 / 10 - par 6 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Classé sous :upload, redimentionnement, jpg, image, images Niveau :Débutant Date de création :05/05/2006 Date de mise à jour :20/05/2006 13:19:05 Vu / téléchargé :16 919 / 2 036

Auteur : Bouillou2

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

 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

  • <?
  • //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>
<?
//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>


 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

20 mai 2006 12:37:43 :
Modification version 1.2 (20.05.06) - Vérification du type de fichier par "mime" avec $_FILES['fichier']['type']; --> Merci niamor36 - Correction sur le renommage des accents du nom temporaire du fichier uploadé--> Merci cvex - Mode test local ajouté (désactivation de réallocation de la mémoire et envoi de mail) - Création du dossier de destination automatique - Utilitaire de test du taux de connexion download par WEBJS ajouté
20 mai 2006 13:19:05 :
Comlément de tous les types MIME JPEG JPEG = Mime: image/jpeg JPEG = Mime: image/pjpeg JPG = Mime: image/jpeg JPG = Mime: image/pjpeg

 Sources du même auteur

Source avec Zip Source avec une capture AJOUTER FACILEMENT DES COMMENTAIRES À VOS PAGE PHP SANS SQL/...
AFFICHAGE PHOTO ALÉATOIRE

 Sources de la même categorie

Source avec Zip COMPTEUR DE CLIQUE PHP AVEC JQUERY par devgoneti
Source avec Zip LIVRE D'OR SIMPLE (POUR DÉBUTANT) par devgoneti
Source avec Zip SCRIPT TRAVAUX POUR VOTRE SITE par FleuryK
Source avec Zip Source avec une capture EL COYOTOS LIVRE D'OR PHP 5 par elcoyotos
COMPTEUR DE VISITE - FICHIER TXT - CODE MINIMAL par SuperChouquette

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture GESTIONNAIRE DE NEWS BASIQUE AVEC UPLOAD D'IMAGES par cod57
Source avec Zip Source avec une capture UPLOADEUR DE FICHIERS MULTIPLES V1 par cod57
UPLOAD IMAGE AVEC MINIATURE par dilar
Source avec Zip FONCTION PHP POUR REDIMENSIONNER UNE IMAGE ET UPLOADER DANS ... par GstJasmin
Source avec Zip CLASSE DE REDIMENSIONNEMENT D'IMAGES PHP par beejeridou

Commentaires et avis

Commentaire de niamor36 le 08/05/2006 10:16:43

Très joli code. Bien strucuré, bien commenté, clair.
Pour info, nécessite GD lib 2.
Je remarque une seule erreur importante qu'on retrouve régulièrement dans ce genre de code :
Tu vérifies le type de fichier (jpg) en récupérant les 3 derniers caractères du nom. Ce qui est une double erreur. D'une part, le fichier pourrait être un "jpeg" et pourtant se faire virer. D'autre part, n'importe qui peut ajouter ".jpg" à la fin de n'importe quel fichier.
Ce qui amène une faille de sécurité potentielle. Il vaut mieux vérifier le type "mime" avec $FILE['image'],['type'].
A part ça, je n'ai pas testé mais ça m'a l'air tout à fait efficace. Un peu curieux cette gestion de la mémoire...? Y'a quand même + simple !
La police Tahoma m'a bien fait rire.

A perfectionner mais c'est une très bonne base assez complète.

Commentaire de cvex le 16/05/2006 21:26:21

Bonsoir,

Bon j'ai testé ton code puisque, il ma fortement interessé, malheuresement il y a une erreur dans ton script, je m'explique :
il remplace tout les caractères autres que des chiffres ou des lettres par un _ par cette inscruction :
$dest_fichier = preg_replace('/([^.a-z\/0-9]+)/i', '_', $dest_fichier);

Le tout en sachant que ça remplace aussi tous les accents et autres la : $tmp = enlever_accents($tmp);

Donc il faut enlever cette ligne surtout dans le cas ou on l'installe en local ;)

++

Commentaire de Bouillou2 le 20/05/2006 12:41:30

Bonjour,

Merci pour vos remarques constructives. Est-ce que quelqu'un aurait une idée pour pouvoir calculer la vitesse d'upload du visiteur? Afin de pouvoir estimer le temps d'upload d'une photo de 1Mb par exemple.

@+,

Bouillou

Commentaire de momoxe le 21/05/2006 09:12:50

Dans ce cas la, mieux vaut jouer avec Ajax et consors...
@+

Commentaire de niamor36 le 21/05/2006 13:59:50

Il m'est arrivé de m'inspirer de ça :
http://www.libellules.ch/testdevotrebandepassante.php
pour donner une approximation de l'upload en fonction de la connexion du client.
Momoxe a raison, Ajax sera utile. Rappelons qu'Ajax est une sorte de vieux module javascript remis au goût du jour. Et cela permet de faire vraiment des tonnes de choses. On trouve un très bon exemple (accessible) avec les "learn more" sur ces pages (une prise au hasard) :

http://store.apple.com/1-800-MY-APPLE/WebObjects/AppleStore.woa/6154000/wo/P64gITUSmoBJ3ABadPLTaA8KmjV/2.?p=0

A part ça le code commence à être jolie. C'est vrai que des code d'upload image, on en trouve pas mal. Celui-ci à quelques atouts :

- un code clair et structuré, et commenté juste ce qu'il faut.
- Une bonne gestion de la mémoire
- complet sans gadget... efficace.

Perso, j'aime pas trop faire des séries d'écho alors qu'un seul peut suffire. Mais c'est une question de goût.
J'avais noté 7 maintenat je mettrais volontier 8 :)
A+R.

Commentaire de Padaone91 le 22/05/2006 15:35:51

Bonjour tout le monde, je débute dans le dev et je voulais savoir comment fait on pour afficher toutes les photos que les visiteurs ont uploadé ?
Car j'ai testé le script, ça fonctionne mais les visiteurs n'ont aucun moyen de voir les photos.

Merci

Commentaire de niamor36 le 22/05/2006 16:48:46

La remarque de Padaone91 est juste.
Peut-être pourrions-nous rajouter quelque chose comme ça à la fin du code de Bouillou :

<? php
//
//Identification du dossier d'image
//
if (!empty($pseudo));
$nom_rep=$nom_rep."/";
//
//on créer l'instance du dossier
$dir = opendir($nom_rep);
//
//petite fonction pour le format de date
function datef($date) {
   return date("d/m/Y H:i:s",$date);  
}
//petit titre
echo "<br><br><b><font color=red>Vos images :</font></b>";
//
//boucle de lecture - affichage du dossier
while ($fich = readdir($dir)) {
   if(is_file($nom_rep.$fich)) {
//
//récupération de quelques infos
   $poidsKo=filesize($nom_rep.$fich)/1024;
   $dim = getimagesize($nom_rep.$fich);
   $dimaffL = $dim[0]/2;
   $dimaffH = $dim[1]/2;
   $crea=datef(filectime($nom_rep.$fich));
//
//affichage
   echo "<br><br><a href=\"$nom_rep.$fich\" target=\"_blank\"><img src=\"$nom_rep.$fich\" width=\"$dimaffL\" height=\"$dimaffH\"></a><br><br>Nom : $fich<br>Taille : $poidsKo Ko<br>Dimension : $dim[0] x $dim[1] Px<br>Date de cr&eacute;ation : $crea"
        }else{
        echo "<br><br>vous n'avez pas encore envoyer d'image<br><br>";
        }
    }
//
//on ferme l'instance du dossier
closedir($dir);
}
?>

Faudrait tester mais il me semble que ça devrait faire l'affaire

A+R.

Commentaire de niamor36 le 22/05/2006 16:50:49

désolé des quelques fautes d'orthographe, j'ai fait ça rapide.

A+R.

Commentaire de Bouillou2 le 22/05/2006 17:05:07

Hello,

Ce n'est pas mon point de vue.

Je m'explique:

Le fait de rendre directement accessible toutes les photos uploadées par vos gentils visiteurs pose à mon avis un gros problème de censure. Je pense qu'une seule petite semaine suffirait pour apercevoir une bonne grosse paire de fesse sur votre site ;o), ce qui n'est pas forcément le but.
C'est pour cela que j'ai ajouté une petite notification mail qui permet de rapidement checker les photos transmises et de les remettre en page. J'ai bien avoir la main mise sur mon site ;o)

Comme je l'ai dis plus haut, c'est ma façon d'utiliser cette application.

Une amélioration possible serait, par membre, de pouvoir visionner toutes les images uploadées. Ce qui oblige un login, ...

@+,

Bouillou

Commentaire de Padaone91 le 22/05/2006 17:05:43

Ouah ça c'est de la reponse rapide, je me suis inscrit aujourd'hui et je ne regrette pas franchement bravo pour le temps de réaction.

Je vais regarder ce que tu propose niamor36 (ça va pas être de la tarte pour un débutant).

Ciao

Commentaire de niamor36 le 22/05/2006 17:28:01

Tout à fait d'accord avec toi Bouillou2 concernant le soucis de rendre toute les images accessibles, l'envie de garder le contrôle, et sur l'intérêt du login.
Perso, j'utilise ce genre de service uniquement pour des gestions admin de site, par avec accès privé... donc, pas vraiment de soucis concernant le contenu. Donc, voir les images peut-être un +.
D'autant que j'ai que l'affichage des images (bon d'accord, c'est un peu fait à l'arrache et c'est un peu du pipo ! j'suis au boulot...) est en fonction du pseudo et du rep correspondant.

Cela dit, je voulais juste répondre à Padaone91. Désolé si j'ai un peu corrompus l'esprit de ton code... ;o)

A ce propos Padaone91, l'idée n'a rien de compliqué. il suffit juste de rajouté les quelques lignes à la suite du code de Bouillou2.

A+R.

Commentaire de niamor36 le 22/05/2006 17:37:59

En fait, je recommande ce script aux débutants. Il est bien foutu. Et relativement accessible, sauf peut-être pour la gestion mémoire, et encore... C'est pas souvent qu'on le trouve dans les script d'upload, c'est pourtant la plupart du temps indispensable.
Bonne base
Merci Bouillou2

Commentaire de Padaone91 le 22/05/2006 20:56:04

Voilà j'ai pris ta partie de script niamor36 et je l'ai modifié mais en fait les photos ne veulent pas s'afficher.

cf : http://padaone.info/upload.php

voilà ce que j'ai mis après le script de Bouillou2

<?php

//Identification du dossier d'image

if (!empty($pseudo));
$nom_rep = "images_upload";

//On créer l'instance du dossier

$dir = opendir($nom_rep);

//Petite fonction pour le format de date

function datef($date)

{
   return date("d/m/Y H:i:s",$date);  
}

//Petit titre

echo "<br><br><b><font color=red>Vos images :</font></b>";

//boucle de lecture - affichage du dossier

while ($fich = readdir($dir)) {

//récupération de quelques infos

   $poidsKo=filesize($nom_rep.$fich)/1024;
   $dim = getimagesize($nom_rep.$fich);
   $dimaffL = $dim[0]/2;
   $dimaffH = $dim[1]/2;
   $crea=datef(filectime($nom_rep.$fich));

//affichage

$lien_image = $site.$nom_rep.$fich."/";
echo "<img src=".$lien_image."><br /><br />";

   echo "<br><br><img src= width=\"$dimaffL\" height=\"$dimaffH\"></a><br><br>Nom : $fich<br>Taille : $poidsKo Ko<br>Dimension : $dim[0] x $dim[1] Px<br>";
        
}

//On ferme l'instance du dossier

closedir($dir);

?>

Merci

Commentaire de niamor36 le 22/05/2006 23:05:53

Pour Padaone91 :

vérifie le html que tu obtiens :
img src="http://padaone.info//images_upload/ " pas bon...
Et d'ailleurs pourquoi mettre cette variable $site ?
Ton erreur vient du chemin incorrect vers l'image.

L'erreur la plus importante vient de la boucle...
Tu as viré la condition de correspondance au fichier. je te remets le code complet :

// si tu veux vraiment un chemin complet et fixe, mets le ici,... au moins t'évites les erreurs en attendant mieux.
$nom_rep = "http://padaone.info/images_upload/";
//On créer l'instance du dossier
$dir = opendir($nom_rep);
//on parcour le dossier (mais on n'a pas encore identifié de fichier)
while ($fich = readdir($dir)) {
//ensuite, là, on identifie le fichier
if(is_file($nom_rep.$fich)) {
//
//Et maintenant seulement, on peut récupérer les infos sur le fichier qui existe bien...
//mets "ceil" pour arrondir à l'entier supérieur. (1ko = 1024 octets)
   $poidsKo=ceil((filesize($nom_rep.$fich))/1024);
//on récupère les dimensions du fichier (cette fois on a le bon chemin)
   $dim = getimagesize($nom_rep.$fich);
//on divise par 2 pour faire vite fait une fausse miniature, juste pour l'affichage
   $dimaffL = $dim[0]/2;
   $dimaffH = $dim[1]/2;
//
//affichage
//
$lien_image = $site.$nom_rep.$fich;
//le ."/" après le nom de l'image ne sert à rien...
//
//attention, tu ajoutes un echo avec une balise<img src...> mais tu laisses celle d'origine vide...
//
//si tu veux pas diviser les dimensions de l'image afficher par 2, remplace $dimaffL et $dimaffH par $dim[0] et $dim[&]
   echo "<br><br><img src=$lien_image width=\"$dimaffL\" height=\"$dimaffH\"></a><br><br>Nom : $fich<br>Taille : $poidsKo Ko<br>Dimension : $dim[0] x $dim[1] Px<br>";
        }
}

Gaffe à ce que tu enlèves. Vérifie tes chemins.
J'espère ne pas avoir trop commenté. Faut dire que je pratique depuis pas longtemps. Ça me fait plaisir de pouvoir aider enfin à mon tour ;-)

A+R.

Commentaire de Padaone91 le 23/05/2006 10:55:03

Dites,

Ne faudrai t'il pas ouvrir une connexion FTP afin de permettre l'affichage des images du dossier ? car tout semble correct mais rien ne s'affiche et lorsque je tape http://padaone.info/images_upload il y a un beau message d'erreur qui me dit vous n'avez pas les droit d'accès.

Merci

Commentaire de niamor36 le 23/05/2006 13:09:53

La connexion ftp ne te permettra pas de voir les images padaone91. Rien à voir.
Vérifie les droits sur son dossier et tout devrait fonctionner.

A+R.

Commentaire de Padaone91 le 23/05/2006 16:58:29

Merci. En fait j'ai trouvé la solution à mon problème. Il s'agit d'une erreur bête (normal je suis débutant) en fait je n'avait pas mis au bon endroit la variable qui permettait d'établir le chemin des fichiers présent dans mon dossier. J'avais mis cette varible avant ma boucle qui parcour le dossier et donc la variable n'était pas incrémentée ce qui entrainai une erreur.

Merci à tous.
Ca marche, à vous de testez si vous voulez car c'est quand même grâce à vous que j'ai pu réaliser cela.

http://padaone.info/upload.php

Commentaire de Bouillou2 le 25/05/2006 13:10:55

Bonjour,

Content d'avoir pu t'aider Padaone ;o)

J'ai besoin d'un petit coup de pouce de votre part:

Je me suis penché sur l'utilisation de AJAX pour permettre l'affichage de la barre de progression lors de l'upload. Malheureusement, il est nécessaire d'installer des scripts sur le serveur et cela m'est impossible.

Pour ceux que cela intéresse:
http://blog.joshuaeichorn.com/archives/2006/03/14/php-ajax-file-upload-progress-meter-updates/

Je me suis dis tant pis, je me rabat sur une estimation du temps restant via la taille du fichier temporaire en cours de chargement. Re-flut --> Impossible de consulter la taille du fichier temporaire en cours. Je ne le vois pas.

Bref, je sèche complètement. A votre avis, serait-il possible de faire un ping-pong avec un fichier présent sur le serveur en forçant le "download" et l'"upload" afin de pouvoir calculer la vitesse?

Merci d’avance pour votre aide,

Bouillou

Commentaire de kubiac88 le 23/06/2006 12:23:16

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.

Commentaire de darkcity le 23/11/2006 22:32:29

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 !

Commentaire de asdr le 30/11/2006 03:12:23

Yep!!!
Merci beaucoup, cela va me permettre d'avancer dans mon projet de blog!!!

Commentaire de jujudu51 le 19/06/2008 13:22:22

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 !!!

Commentaire de php26 le 18/01/2010 16:23:07

bonjour!

est ce que quelque aurait une solution pour les photos > 2MO!!
cela fait deux semaines que je tourne sans solutions!
merci par avance!!

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

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 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 Image [ par piep14 ] Bonjour, je dois faire un upload d'une photo. J'ai donc fait ceci :&nbsp;&nbsp;&nbsp;&lt;?&nbsp;&nbsp;&nbsp;$date = date('Y/m/d H:i:S');&nbsp;&nbsp;&n 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 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 Upload apres Redimension d'une image jpg sous Free [ par MrManchot ] Tout d&#233;ja Bonjour a tous &nbsp;(c'est mon premier poste ici).Je suis d&#233;butant en php, et je n'arrive pas a Uploader apres avoir redimensionn inserer less liens url d'images dans une base de données [ par hannao ] bonjour tous le monde, voilà d'un côté j'ai fait un code pour faire des vignettes qui fonctionne bien.J'ai un dossier images qui contient x dossier im image php [ par chaman35 ] Bonjour,j'ai un gros soucis sur mes pages .php elles n'affichent pas les images, je les ai importé comme si c'était une page html exemple :&lt;img src IE8 change les couleurs des photos [ par cseagle ] Bonjour, Une surprise ce matin après mise à jour vers IE8. Sur mon j'ai une interface pour mettre des annonces avec photos en ligne, jusque la pas de mon script crée mes fichiers dans un endroit inattendu [ par angelimad ] bonjour tout le monde. mon problème c'est que j'ai un site php hébergé sur un serveur Linux. mon script upload le fichier via le formulaire du client


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 2,371 sec (3)

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