IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez / Téléchargez Sources et Outils PHP Discussion :

Upload d'image par lot et FTP


Sujet :

Contribuez / Téléchargez Sources et Outils PHP

  1. #1
    Candidat au Club
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Upload d'image par lot et FTP
    Bonsoir, bon je me lance dans le grand bain..
    Je développe depuis maintenant quelques temps en php et je souhaiterais vous faire partager quelques un de mes scripts.
    Bien sur ce ne sont que de modestes codes sans prétentions qui sont ,et j'en suis sur, améliorables, mais étant on va dire débutant "confirmé" , soyez indulgent envers moi.

    Dans le cas présent il s'agit d'un script permettant d'uploader des images (un repertoire complet).
    La problématique étais la suivante: pouvoir récuperer des photos situées dans un repertoire uniquement accesible par FTP et les publier sur un site via une interface d'administration.
    Ces images faisant partie d'une animation flash, elles sont gérees en plus via des fichiers XML qui doit etre actualisés à chaque upload (ça c'etait pas le plus dur à faire.. )

    J'ai beau eu chercher sur le net des scripts permettant de le faire, je n'ai pas trouvé, aussi j'ai donc décidé de le faire et de vous le faire partager.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    <?PHP
     
    require_once('fonction_rep.php');//appel du fichier de fonction	globales	
    require_once('xml/fonction_xml.php');//appel du fichier de fonction		xml
    require_once('explorateur_fct.php');//appel du fichier de fonction	
     
    ini_set ('max_execution_time', 0); // Aucune limite d'execution 
    //recuperations des variables issue de la requete ajax
    	$destination=$_GET['destination']; //repertoire ou seront uploadées les images
    	//titre et description de la serie d'image facultatif	
    	$titre=$_GET['titre'];
    	$description=$_GET['description'];	
    	$cdf=$_GET['cdf'];//variable pour savoir si les images sont en ligne ou non true ou false
    	$source=$_GET['source'];
    	$tab_source=explode('/',$source);
    	$rang=count($tab_source)-1;
    	$rep_source=$tab_source[$rang];
    	//je recupere juste le nom du dossier pour prefixer la photo
    	$tabentete=explode('/',$destination);
    	$n=count($tabentete)-1;
    	$entete=$tabentete[$n];
     
    	//je compte le nombre d'image du rep de destination car les images devront avoir un N° d'ordre en plus du nom (cahier des charges..)
    	$nbimage=compte_image($destination);
    	$cpt=$nbimage+1;
    	$ext_image = array(".jpg", ".jpeg", ".png", ".bmp", ".gif", ".ico", ".tiff");
     
    	//connexion FTP
    		$connexion=connect_to();
    //je parcours le rep source
    		$contents = ftp_nlist($connexion,'/');
     
    			for($i=0;$i<count($contents);$i++)
    			{			
    				$ret=ftp_nlist($connexion,'.'.$contents[$i]);	
    				if(	$contents[$i] == '/'.$rep_source)
    				{			
    					for($z=0;$z<count($ret);$z++)
    					{
    				// je suis dans le bon rep, je recupere que les images
    						$ext = strrchr($ret[$z],'.');
    						$ext = strtolower($ext);
    						if (in_array($ext,$ext_image))
    						{
    						//je renomme en mettant un N°
    							$nom_tmp=str_replace($rep_source.'/','',$ret[$z]);//je vire le debut( img.jpg)
    							$nom_tmp=str_replace($ext,'',$nom_tmp);//je vire l'extension(img)
    							$newimage=str_replace($nom_tmp,$cpt,$ret[$z]);
    							$link=imagefromFTP($ret[$z]);
     
    							switch($ext)
    							{
    							case".jpg":
    							$type_img=imagecreatefromjpeg($link);
    							break;
    							case".jpeg":
    							$type_img=imagecreatefromjpeg($link);
    							break;
    							case".png":
    							$type_img=imagecreatefrompng($link);
    							break;
    							case".gif":
    							$type_img=imagecreatefromgif($link);
    							break;
    							default:
    							$type_img=imagecreatefromjpeg($link);
    							break;							
    							}
    							list($width, $height) = getimagesize($link);
    				//je redimensionne l'image en 700 par 700 maxi
    					$tab_dim=redimage($link,'700','700');
    					 $NouvelleImage = imagecreatetruecolor($tab_dim['new_width'] , $tab_dim['new_height']) or die ("Erreur1");
    					imagecopyresampled($NouvelleImage , $type_img,0,0, 0,0, $tab_dim['new_width'] , $tab_dim['new_height'], $width,$height);
    					$img_final=$destination.'/'.$entete.'_'.$cpt.$ext;		
    				//echo 'newimage'.$newimage.chr(10).'imlgfinal  '.$img_final.chr(10);			
    					imagejpeg($NouvelleImage, $img_final);
    					$cpt++;
    						}
    					}				
    				}	
     
    			}
     
    	//je reecris le xml
    	xml_lot($destination,$cdf,utf8_encode($titre),utf8_encode($description),'lot');
     
    ?>
    la fonction connect_to permettant d'ouvrir une connexion ftp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    function connect_to()
    {
    	// création de la connexion
    	$conn_id = ftp_connect("adresse_FTP");
    	$login='login';
    	$mdp='mdp';
     
     
     
    	$login_result = ftp_login($conn_id, $login, $mdp);	
    	ftp_pasv($conn_id, TRUE);	
    		return $conn_id;  
     
    }
    la fonction permettat de recuperer le lien de l'image avec en parametre le repertoire et le nom de l'image en cours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function imagefromFTP($fic)
    {
    	$url = "@adresse_FTP/";
    	$login='login:';
    	$mdp='mdp';
    	// cree l'image issue du ftp
    	$link='ftp://'.$login.$mdp.$url.$fic;
     
    	return $link;
    }
    la fonction permettant de compter le nombre d'image contenue dans le repertoire sans tenir compte des icones, la aussi cela faisait parti du cahier des charges

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    function compte_image($dir)
         {
     
                 $num = 0;
     
    			 $limitedext = array(".jpg", ".jpeg", ".png", ".bmp", ".gif","swf");
    			 $nom_ignore = array( 'ico_b.png', 'ico_th.png', 'icone.png');
                 $dir_handle = opendir(trim($dir));
                   while($entry = readdir($dir_handle))
    			   {
    			   	$ext = strrchr($entry,'.');
    					$ext = strtolower($ext);
     
                         if(is_file($dir.'/'.$entry) && in_array($ext,$limitedext ) && !in_array($entry,$nom_ignore ))
    					 {
     
                             $num++;
    					 }
    				}
                 closedir($dir_handle);
     
                 return $num;
         }
    la fonction de redimensionnement des images
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    function redimage($img_src,$dst_w,$dst_h) {
     
       // Lit les dimensions de l'image
       $size = getimagesize($img_src);  
       $src_w = $size[0]; $src_h = $size[1];
       // Teste les dimensions tenant dans la zone
       $test_h = round(($dst_w / $src_w) * $src_h);
       $test_w = round(($dst_h / $src_h) * $src_w);
       // Si Height final non précisé (0)
       if(!$dst_h) $dst_h = $test_h;
       // Sinon si Width final non précisé (0)
       elseif(!$dst_w) $dst_w = $test_w;
       // Sinon teste quel redimensionnement tient dans la zone
       elseif($test_h>$dst_h) $dst_w = $test_w;
       else $dst_h = $test_h;
     
       // Affiche les dimensions optimales
       //echo "WIDTH=".$dst_w." HEIGHT=".$dst_h;
       return array('new_width'=>$dst_w, 'new_height'=>$dst_h);
    }
    et la fonction d'ecriture du fichier xml necassaire à la visualisatiion des images dans l'animation flash
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
     
    function xml_lot($rep,$chemindefer,$titre,$description,$qt)
    {
    //creation d'un xml apre un upload par lot
    // creation des array des noeuds et des items de l'xml 
     
    		$tab_noeud=array('repertoires', 'images');
    		$tab_item=array('repertoire','image');
    		$tab_sous_rep=array('nom', 'titre');
    		$tab_sous_fich=array('fichier', 'description');	
     
    		$xml_string='<?xml version="1.0" encoding="UTF-8"?>'.chr(10);
    		if($chemindefer==true)
    		{
    		$xml_string.='<'.$tab_noeud[1].'>'.chr(10);
    		$xml_img='';
    		$xml_rep='';
    		}
    		else
    		{
    		$xml_string.='<'.$tab_noeud[0].'>'.chr(10);
    		$xml_img='';
    		$xml_rep='';
    		}
     
    //listage du repertoire
    	$contenu_dir=lister($rep);
    	$tabdossier=$contenu_dir['repertoire'];
    	$tabimage=$contenu_dir['image'];	
     
    			/********************************/
    			/*			images				*/
    			/********************************/
    			$tab_img_tmp=array();
    			if(count($tabimage)>0)
    			{
    			$nbimage=count($tabimage);
    			//echo 'nbr d\'image'.$nbimage;
    				foreach($tabimage as $value)
    				{
    				//echo $value.'<br/>';
    				//je vire le .jpg
    				$value=str_replace('.jpg','',$value);
    				//je vire le _th
    				$value=str_replace('_th','',$value);
    				//je vire le _b
    				$value=str_replace('_b','',$value);
    					//je vire les extensions
     
    					array_push($tab_img_tmp,$value);
    				}
    				//je vire les doublons
    				$tab_img_tmp=array_unique($tab_img_tmp);
    				//je reindexe le tableau
    				$tab_img_tmp=array_values($tab_img_tmp);
     
    				//chaine xml image
    				for($i=0;$i<count($tab_img_tmp);$i++)
    				{
     
    							if($tab_img_tmp[$i] !='ico')
    							{
    							$xml_img.='<'.$tab_item[1].'>'.chr(10);//<image>
    							$etat=1;
    							$xml_img.='<'.$tab_sous_fich[0].'>'.$tab_img_tmp[$i].'</'.$tab_sous_fich[0].'>'.chr(10);//fichier
    							$xml_img.='<'.$tab_sous_fich[1].'>'.$i.' '.$description.'</'.$tab_sous_fich[1].'>'.chr(10);//description				
    							}
    							else
    							{
    							$etat=0;
    							$xml_img.='';
    							}
     
    					if($etat==1)
    					{
    					$xml_img.='</'.$tab_item[1].'>'.chr(10);//<image>
    					}
    					else
    					{
    					$xml_img.='</'.$tab_item[0].'>'.chr(10);//<image>
    					}
     
    				}//for
    					if($chemindefer=='oui')
    					{
    					$xml_img.='</'.$tab_noeud[1].'>'.chr(10);
    					}
    					else
    					{
    					$xml_img.='</'.$tab_noeud[0].'>'.chr(10);
    					}
    				$xml_string.=$xml_img;
    			}
    		//j'ecrits le xml 
    		$xml_ref=$rep.'/galerie.xml';		
     
    		$Fw= fopen($xml_ref,"w");
    					 fseek ($Fw, 0); //positionne au debut
    					 fputs ($Fw, $xml_string); //ecrit la chaine
    					 fclose ($Fw); //ferme 
     
     
    }
    voila j'espere que cela pourra etre utile à quelqu'un.
    Tout ceci (et il n'yen a qu'une petite partie) faisait parti de mon premier gros projet, et je suppose qu'il peut etre amélioré.

    Au final ce script permet d'uploader un repertoire entier d'image (ou en partie en rajoutant une checbox a chaque image et en prenant en compte que les chkbox cochées)

  2. #2
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 53
    Points : 61
    Points
    61
    Par défaut
    Salut,
    J'ai pas réellement testé ton script mais je trouve que ce serait une bonne chose si tu pouvais améliorer un tout petit peu la mise en forme....

  3. #3
    Candidat au Club
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    je vais y veiller à l'avenir , il est vrai que j'ai pris de mauvaises habitude mais le principal c'est que ce script fonctionne à 100%

    j'en ai d'autres sous le chapeau que je partagerais sous peu.

    Par contre aurais tu un conseil de mise en forme, autant faire les choses bien, je ne demande qu'a continuer d'apprendre, c'est en faisant des ereurs que l'on, apprend

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par lewis34 Voir le message
    Par contre aurais tu un conseil de mise en forme, autant faire les choses bien, je ne demande qu'a continuer d'apprendre, c'est en faisant des ereurs que l'on, apprend
    tu pourrais par exemple indenter le code en mettant au même niveau les lignes qui sont dans le même bloc comme par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            $Fw= fopen($xml_ref,"w");
                         fseek ($Fw, 0); //positionne au debut
                         fputs ($Fw, $xml_string); //ecrit la chaine
                         fclose ($Fw); //ferme
    qui peut se mettre comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            $Fw= fopen($xml_ref,"w");
            fseek ($Fw, 0); //positionne au debut
            fputs ($Fw, $xml_string); //ecrit la chaine
            fclose ($Fw); //ferme
    et pareil pour les boucles qui pourraient donner ça par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
                    //chaine xml image
     
                    for ($i = 0; $i < count($tab_img_tmp); $i++)
                    {
                        if($tab_img_tmp[$i] != 'ico')
                        {
                            $xml_img.='<'.$tab_item[1].'>'.chr(10);//<image>
                            $etat=1;
                            $xml_img.='<'.$tab_sous_fich[0].'>'.$tab_img_tmp[$i].'</'.$tab_sous_fich[0].'>'.chr(10);//fichier
                            $xml_img.='<'.$tab_sous_fich[1].'>'.$i.' '.$description.'</'.$tab_sous_fich[1].'>'.chr(10);//description                
                        }
                        else
                        {
                            $etat=0;
                            $xml_img.='';
                        }
     
                        if ($etat == 1)
                        {
                            $xml_img.='</'.$tab_item[1].'>'.chr(10);//<image>
                        }
                        else
                        {
                            $xml_img.='</'.$tab_item[0].'>'.chr(10);//<image>
                        }
     
                    }//for
     
                    if ($chemindefer == 'oui')
                    {
                        $xml_img.='</'.$tab_noeud[1].'>'.chr(10);
                    }
                    else
                    {
                        $xml_img.='</'.$tab_noeud[0].'>'.chr(10);
                    }
     
                    $xml_string.=$xml_img;
    après c'est à toi de décider ta façon d'indenter et de regarder à chaque fois à la fin en te disant "si je relis ce code dans 6 mois est ce qu'il sera toujours aussi clair que maintenant ?"

  5. #5
    Candidat au Club
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    ok, merci mathieu .

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2009
    Messages : 15
    Points : 14
    Points
    14
    Par défaut Upload images
    Bonjour,

    J'ai un problème analogue. Je dois mettre sur le site web plusieurs répertoires
    d'images qui ont été crées sur le disque dur.
    Je vais voir si je peux utiliser ton code.


    Isabelle

  7. #7
    Candidat au Club
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Bonjour, aucun problemes, ce petit bout de script est fait pour etre utilisé, tu peut l'adapter à tes besoins.
    Si tu a un soucis n'hesite pas

Discussions similaires

  1. Uploader une image par le biais d'un formulaire
    Par benthebest dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 05/10/2012, 13h30
  2. problème upload image par ftp chez 1&1
    Par boubou_s dans le forum 1&1
    Réponses: 0
    Dernier message: 01/04/2010, 18h30
  3. [FTP] Traitement par lot
    Par gandalf76fr dans le forum Langage
    Réponses: 5
    Dernier message: 06/11/2007, 23h04
  4. [Upload] upload de fichier par ftp
    Par sami_c dans le forum Langage
    Réponses: 3
    Dernier message: 22/03/2006, 11h18
  5. [Upload] upload d'image par connexion ftp
    Par pimpmyride dans le forum Langage
    Réponses: 2
    Dernier message: 08/03/2006, 00h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo