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

Langage PHP Discussion :

[FTP] Traitement par lot


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 64
    Points : 55
    Points
    55
    Par défaut [FTP] Traitement par lot
    Bonjour,

    dans le cadre d'un projet perso, je pense que je serais confronté à un légers problème de temps de traitement et je n'ai hélas pas d'idée pour le résoudre.

    Tout d'abord le contexte : J'ai créé un album photo web de ma fille, à destination de ma famille (géré par php web gallerie).

    Le probleme : Pour facilliter l'organisation, il à été décidé que les photos seraient organisées par années / mois / jours : http://www.aurianne-pastre.fr/
    Mais devant la prolifération des photos, le temps pris par mon boulot, j'ai de moins en moins de temps pour faire cette organisation. Surtout que j'attend une 2eme fille pour dans 5 mois.

    J'ai donc eut l'idée de faire un bout de code qui lit les infos EXIFS des photos que j'airais préalablement uploadées par FTP, et les déplace dans les repertoires qui conviennent (et crée ceux qui n'existe éventuelement pas encore) automatiquement à partir des dates de prises de vues. De plus il créera éventuelement les miniatures adéquates.

    Le gros problème : J'upload souvent les photos par grande quantitées car je ne m'astreint pas à le faire tout les jours. Hélas ou heureusement (sécurité oblige) je pense que les traitements seront trop long suite au max execution time... Certe j'ai le controle sur ces parametres mais je ne trouve pas sécurisant pour le serveur de les augmenter de façon trop élevée.

    Je cherche donc un moyen des les traiter par lots, mais je n'ai aucune idée de comment y parvenir.

    Voici un bout de mon code (miniatures pas encore codées), en esperant que vous aurez quelques idées à me soumetre :
    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
    <?php
    $rep = "galeries/";
    $rep_dest = "galeries2/";
    $entree = opendir($rep);
    while (($file = readdir($entree)) !== false)
    {
    	if (is_file($rep.$file) && $file !="." && $file !="..")
    	{
    	$img=$rep.$file;
    	if(in_array(strtolower(end(explode('.', $img))), array('jpg', 'jpeg', 'tif', 'tiff'))) // Si fichier Jpeg ou Tiff
    		{
    			if($exif = exif_read_data($img, 'EXIF' , true)) // Si le fichier $img contient des infos Exif
    			{
    			foreach ($exif as $key => $section) // On parcourt la première partie du tableau multidimensionnel
    			{      
    			    foreach ($section as $name => $value) // On parcourt la seconde partie
    			    {
    			        $exif_tab[$name] .= $value; // Récupération des valeurs dans le tableau $exif_tab
    			    }
    			}
    			}
    			if($exif_tab['DateTimeOriginal'])
    			{
    		    $date = $exif_tab['DateTimeOriginal']; // Date de la prise de vue (heure de l'appareil)
    			// La date est d'un format spécial, on va donc la rendre lisible
    			$date = substr_replace($date, '-',4,1);
    			$date = substr_replace($date, '-',7,1);
    			$tab_month = array(1=>"Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre");
    			$tab_day = array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi");
    			$tab_date = explode(' ', $date);
    			$date_hour = explode(':', $tab_date[1]);
    			$tab_dmy = explode('-', $tab_date[0]);
    			$day = date("w", mktime(0, 0, 0, $tab_dmy[1], $tab_dmy[2], $tab_dmy[0]));
    			settype($tab_dmy[1], integer);
    			$jour_nom=$tab_day[$day];
    			$jour_num=$tab_dmy[2];
    			$mois=$tab_month[$tab_dmy[1]];
    			$annee=$tab_dmy[0];
    			$date=$jour_nom.'_'.$jour_num.'_'.$mois.'_'.$annee.'_'.$date_hour[0].'h'.$date_hour[1];
    			echo $file.' '.$date.'<br />';
    			$dest=$rep_dest.$annee.'/'.$mois.'/'.$jour_num.'/';
    			if(!is_dir($rep_dest.$annee.'/'))
    			{
    			mkdir($rep_dest.$annee.'/', 0755);
    			}
    			if(!is_dir($rep_dest.$annee.'/'.$mois.'/'))
    			{
    			mkdir($rep_dest.$annee.'/'.$mois.'/', 0755);
    			}
    			if(!is_dir($rep_dest.$annee.'/'.$mois.'/'.$jour_num.'/'))
    			{
    			mkdir($rep_dest.$annee.'/'.$mois.'/'.$jour_num.'/', 0755);
    			}			
    			copy($img,$dest.$file.'_'.$date.'.jpg');
    			unset($exif_tab);
    			}
    		}
    	}
    }
    ?>
    Merci d'avance de votre aide.
    Cordialement.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    Une méthode un peu bidouille mais qui fonctionne consiste à intégrer un compteur dans ta boucle de lecture du répertoire, puis lorsque tu as effectué un certain nombre de traitements réappeler la page :

    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
     
    <?php
    $rep = "galeries/";
    $rep_dest = "galeries2/";
    $entree = opendir($rep);
    $compteur_lot = 0;
    while (($file = readdir($entree)) !== false && $compteur_lot < 100)
    {
    	if (is_file($rep.$file) && $file !="." && $file !="..")
    	{
    	$img=$rep.$file;
    	if(in_array(strtolower(end(explode('.', $img))), array('jpg', 'jpeg', 'tif', 'tiff'))) // Si fichier Jpeg ou Tiff
    		{
    			if($exif = exif_read_data($img, 'EXIF' , true)) // Si le fichier $img contient des infos Exif
    			{
    			foreach ($exif as $key => $section) // On parcourt la première partie du tableau multidimensionnel
    			{      
    			    foreach ($section as $name => $value) // On parcourt la seconde partie
    			    {
    			        $exif_tab[$name] .= $value; // Récupération des valeurs dans le tableau $exif_tab
    			    }
    			}
    			}
    			if($exif_tab['DateTimeOriginal'])
    			{
    		    $date = $exif_tab['DateTimeOriginal']; // Date de la prise de vue (heure de l'appareil)
    			// La date est d'un format spécial, on va donc la rendre lisible
    			$date = substr_replace($date, '-',4,1);
    			$date = substr_replace($date, '-',7,1);
    			$tab_month = array(1=>"Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre");
    			$tab_day = array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi");
    			$tab_date = explode(' ', $date);
    			$date_hour = explode(':', $tab_date[1]);
    			$tab_dmy = explode('-', $tab_date[0]);
    			$day = date("w", mktime(0, 0, 0, $tab_dmy[1], $tab_dmy[2], $tab_dmy[0]));
    			settype($tab_dmy[1], integer);
    			$jour_nom=$tab_day[$day];
    			$jour_num=$tab_dmy[2];
    			$mois=$tab_month[$tab_dmy[1]];
    			$annee=$tab_dmy[0];
    			$date=$jour_nom.'_'.$jour_num.'_'.$mois.'_'.$annee.'_'.$date_hour[0].'h'.$date_hour[1];
    			echo $file.' '.$date.'<br />';
    			$dest=$rep_dest.$annee.'/'.$mois.'/'.$jour_num.'/';
    			if(!is_dir($rep_dest.$annee.'/'))
    			{
    			mkdir($rep_dest.$annee.'/', 0755);
    			}
    			if(!is_dir($rep_dest.$annee.'/'.$mois.'/'))
    			{
    			mkdir($rep_dest.$annee.'/'.$mois.'/', 0755);
    			}
    			if(!is_dir($rep_dest.$annee.'/'.$mois.'/'.$jour_num.'/'))
    			{
    			mkdir($rep_dest.$annee.'/'.$mois.'/'.$jour_num.'/', 0755);
    			}			
    			copy($img,$dest.$file.'_'.$date.'.jpg');
    			unset($exif_tab);
    			}
    		}
    	}
            $compteur_lot++;
    }
    echo "<script language='javascript'>document.location.href='".$_SERVER['PHP_SELF']."';</script>";
    ?>
    Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ?

    Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée"

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 64
    Points : 55
    Points
    55
    Par défaut
    pas bète, je n'avais pas pensé à cela, surtout que vu que les fichiers sont déplacé il peut reprendre à 0 la liste de fichier étant nouvelle (les 100 premiers déplacés, il prend les 100 suivants.

    Je vais tacher de metre ça en place et de faire des test le perf, le but étant de ne pas coucher le serveur durant ces opérations.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 64
    Points : 55
    Points
    55
    Par défaut
    Bon petit probleme : ça tourne en boucle à l'infini.

    Normal je pense car on sors du while si plus de fichiers ou si compteur lot >5
    Et on redirige auto vers la par de traitement dans un cas comme dans l'autre, il me faut donc faire un test de condition avant la redirection, je vais tacher d'étudier le probleme.

    De plus, je me demande si je ne devrait pas metre un sleep dans ma boucle de traitement, histoire de ne pas trop charger le serveur à chaque lot.

    qu'en pensez vous ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 64
    Points : 55
    Points
    55
    Par défaut
    Bon la bonne nouvelle c'est que ça marche :
    Traitement de lot de 5 images avec copies et création de miniatures (toujours nommées en fonction de la date de prise de vue obtenue à partir des infos EXIF).
    Mais, car il y a bien sur un mais : comme je le craignais, durant le traitement de 80 images en 640*480 (sachant que la résolution en prod sera de 800*600 ou 1024/768 et que je traiterais des lots de 300 à 500 photos), je sature le CPU (P4 3ghz) du serveur à plus de 80%.
    Ce qui n'est hélas pas viable pour les autre sites que j'héberge dessus.

    A votre avis un petit sleep dans la boucle aiderait il à faire baisser ce taux d'occupation CPU ?
    Ou avez vous une autre idée pour limiter la consomation de ressources ?

    Pour info voila mon code :
    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
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    <?php
    //error_reporting(E_ALL);
    function get_extension($fichier)
    {
      $extArray = explode(".", $fichier);
      $extension = $extArray[count($extArray) - 1]; 
      return strtolower($extension);
    }
    function miniature($dest,$img_finale,$rep_tn_finale,$tn_finale)
    {
    if (isset($dest) && !empty($dest) && isset($img_finale) && !empty($img_finale) && isset($rep_tn_finale) && !empty($rep_tn_finale) && isset($tn_finale) && !empty($tn_finale))
    {
    $thumb_largeur_max = 128;
    $thumb_hauteur_max = 128;
    $srcImage = imagecreatefromjpeg($dest.$img_finale);
    			$srcWidth    = imagesx( $srcImage ); 
    			$srcHeight   = imagesy( $srcImage ); 
    			$ratioWidth  = $srcWidth/$thumb_largeur_max;
    			$ratioHeight = $srcHeight/$thumb_hauteur_max;
    			if ( ( $ratioWidth > 1 ) or ( $ratioHeight > 1 ) )
    			    {
    			      if ( $ratioWidth < $ratioHeight)
    			      { 
    			        $destWidth = $srcWidth/$ratioHeight;
    			        $destHeight = $thumb_hauteur_max; 
    			      }
    			      else
    			      { 
    			        $destWidth = $thumb_largeur_max; 
    			        $destHeight = $srcHeight/$ratioWidth;
    			      }
    			    }
    			else
    			{
    			 $destWidth = $srcWidth;
    			 $destHeight = $srcHeight;
    			}
    			$destImage = imagecreatetruecolor( $destWidth, $destHeight);
    			imagecopyresampled( $destImage, $srcImage, 0, 0, 0, 0,$destWidth,$destHeight,$srcWidth,$srcHeight );
    			if(!is_dir($rep_tn_finale))
    			{
    			mkdir($rep_tn_finale, 0755);
    			}
    			imagejpeg($destImage, $tn_finale);
    }
    }
    $rep = "galeries/";
    $rep_dest = "galeries2/";
    $entree = opendir($rep);
    $compteur_lot = 0;
    while (($file = readdir($entree)) !== false && $compteur_lot <= 5)
    {
    	if (is_file($rep.$file) && $file !="." && $file !=".." && get_extension($file) == 'jpg')
    	{
    	$img=$rep.$file;
    	if(in_array(strtolower(end(explode('.', $img))), array('jpg', 'jpeg', 'tif', 'tiff'))) // Si fichier Jpeg ou Tiff
    		{
    			if($exif = exif_read_data($img, 'EXIF' , true)) // Si le fichier $img contient des infos Exif
    			{
    			foreach ($exif as $key => $section) // On parcourt la première partie du tableau multidimensionnel
    			{      
    			    foreach ($section as $name => $value) // On parcourt la seconde partie
    			    {
    			        $exif_tab[$name] .= $value; // Récupération des valeurs dans le tableau $exif_tab
    			    }
    			}
    			}
    			if($exif_tab['DateTimeOriginal'])
    			{
    		    $date = $exif_tab['DateTimeOriginal']; // Date de la prise de vue (heure de l'appareil)
    			// La date est d'un format spécial, on va donc la rendre lisible
    			$date = substr_replace($date, '-',4,1);
    			$date = substr_replace($date, '-',7,1);
    			$tab_month = array(1=>"Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre");
    			$tab_day = array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi");
    			$tab_date = explode(' ', $date);
    			$date_hour = explode(':', $tab_date[1]);
    			$tab_dmy = explode('-', $tab_date[0]);
    			$day = date("w", mktime(0, 0, 0, $tab_dmy[1], $tab_dmy[2], $tab_dmy[0]));
    			settype($tab_dmy[1], integer);
    			$jour_nom=$tab_day[$day];
    			$jour_num=$tab_dmy[2];
    			$mois=$tab_month[$tab_dmy[1]];
    			$annee=$tab_dmy[0];
    			$date=$jour_nom.'_'.$jour_num.'_'.$mois.'_'.$annee.'_'.$date_hour[0].'h'.$date_hour[1];
    			echo $file.' '.$date.'<br />';
    			$dest=$rep_dest.$annee.'/'.$mois.'/'.$jour_num.'/';
    			if(!is_dir($rep_dest.$annee.'/'))
    			{
    			mkdir($rep_dest.$annee.'/', 0755);
    			}
    			if(!is_dir($rep_dest.$annee.'/'.$mois.'/'))
    			{
    			mkdir($rep_dest.$annee.'/'.$mois.'/', 0755);
    			}
    			if(!is_dir($rep_dest.$annee.'/'.$mois.'/'.$jour_num.'/'))
    			{
    			mkdir($rep_dest.$annee.'/'.$mois.'/'.$jour_num.'/', 0755);
    			}
    			$img_finale=$file.'_'.$date.'.jpg';
    			$rep_tn_finale=$dest.'/thumbnail/';
    			$tn_finale=$rep_tn_finale.'TN_'.$file.'_'.$date.'.jpg';
    			rename($img,$dest.$img_finale);
    			miniature($dest,$img_finale,$rep_tn_finale,$tn_finale);
    			unset($exif_tab);
    			}
    		}
    	}
    	$compteur_lot++;
    }
    if ($compteur_lot > 5)
    {
    echo "<script language='javascript'>document.location.href='".$_SERVER['PHP_SELF']."';</script>";
    }
    echo "finit";
    ?>
    Merci d'avance de votre aide.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 64
    Points : 55
    Points
    55
    Par défaut
    Bon après pas mal de déboires non dut au script (le soft que j'utilisais pour automatiser la réduction des photos envoie envoie par ftp avait tendance à perdre certaines infos exif), cette version du script marche :

    Compter 16 mins pour le traitement de 2000 photos à 60% d'utilisation CPU

    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
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    <?php
    //error_reporting(E_ALL);
    function get_extension($fichier)
    {
      $extArray = explode(".", $fichier);
      $extension = $extArray[count($extArray) - 1]; 
      return strtolower($extension);
    }
    function get_date($img)
    {
    if(in_array(strtolower(end(explode('.', $img))), array('jpg', 'jpeg', 'tif', 'tiff'))) // Si fichier Jpeg ou Tiff
    		{
    			if($exif = exif_read_data($img, 'EXIF' , true)) // Si le fichier $img contient des infos Exif
    			{
    			foreach ($exif as $key => $section) // On parcourt la première partie du tableau multidimensionnel
    			{      
    			    foreach ($section as $name => $value) // On parcourt la seconde partie
    			    {
    			        $exif_tab[$name] .= $value; // Récupération des valeurs dans le tableau $exif_tab
    			    }
    			}
    			}
    			if($exif_tab['DateTimeOriginal'])
    			{
    		    $date = $exif_tab['DateTimeOriginal']; // Date de la prise de vue (heure de l'appareil)
    			// La date est d'un format spécial, on va donc la rendre lisible
    			$date = substr_replace($date, '-',4,1);
    			$date = substr_replace($date, '-',7,1);
    			$tab_month = array(1=>"Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre");
    			$tab_day = array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi");
    			$tab_date = explode(' ', $date);
    			$tab_dmy = explode('-', $tab_date[0]);
    			$day = date("w", mktime(0, 0, 0, $tab_dmy[1], $tab_dmy[2], $tab_dmy[0]));
    			settype($tab_dmy[1], integer);
    			$jour_nom=$tab_day[$day];
    			$jour_num=$tab_dmy[2];
    			$mois=$tab_month[$tab_dmy[1]];
    			$annee=$tab_dmy[0];
    			$date=$jour_nom.'_'.$jour_num.'_'.$mois.'_'.$annee.'_';
    			$result = array("date"=>$date, "annee"=>$annee, "mois"=>$mois, "jour_num"=>$jour_num, "jour_nom"=>$jour_nom);
    			return $result;
    			}
    		}
    }
    function miniature($dest,$img_finale,$rep_tn_finale,$tn_finale)
    {
    if (isset($dest) && !empty($dest) && isset($img_finale) && !empty($img_finale) && isset($rep_tn_finale) && !empty($rep_tn_finale) && isset($tn_finale) && !empty($tn_finale))
    {
    $thumb_largeur_max = 128;
    $thumb_hauteur_max = 128;
    $srcImage = imagecreatefromjpeg($dest.$img_finale);
    			$srcWidth    = imagesx( $srcImage ); 
    			$srcHeight   = imagesy( $srcImage ); 
    			$ratioWidth  = $srcWidth/$thumb_largeur_max;
    			$ratioHeight = $srcHeight/$thumb_hauteur_max;
    			if ( ( $ratioWidth > 1 ) or ( $ratioHeight > 1 ) )
    			    {
    			      if ( $ratioWidth < $ratioHeight)
    			      { 
    			        $destWidth = $srcWidth/$ratioHeight;
    			        $destHeight = $thumb_hauteur_max; 
    			      }
    			      else
    			      { 
    			        $destWidth = $thumb_largeur_max; 
    			        $destHeight = $srcHeight/$ratioWidth;
    			      }
    			    }
    			else
    			{
    			 $destWidth = $srcWidth;
    			 $destHeight = $srcHeight;
    			}
    			$destImage = imagecreatetruecolor( $destWidth, $destHeight);
    			imagecopyresampled( $destImage, $srcImage, 0, 0, 0, 0,$destWidth,$destHeight,$srcWidth,$srcHeight );
    			if(!is_dir($rep_tn_finale))
    			{
    			mkdir($rep_tn_finale, 0755);
    			chmod($rep_tn_finale, 0755); 
    			}
    			imagejpeg($destImage, $tn_finale);
    }
    }
    $rep = "a_trier/";
    $rep_dest = "galleries/";
    $rep_erreur="en_erreur/";
    $entree = opendir($rep);
    $entree_erreur = opendir($rep_erreur);
    $compteur_lot = 0;
    while (($file = readdir($entree)) !== false && $compteur_lot <= 30)
    {
    	if (is_file($rep.$file) && $file !="." && $file !=".." && get_extension($file) == 'jpg')
    	{
    		$img=$rep.$file;
    		$file=str_replace(' ','',$file);
    		$retour= get_date($img);
    		$date=$retour[date];
    		$annee=$retour[annee];
    		$mois=$retour[mois];
    		$jour_num=$retour[jour_num];
    		$jour_nom=$retour[jour_nom];
    		if (empty($annee) OR empty($mois) OR empty($jour_num) OR empty($jour_nom))
    		{
    			rename($img,$rep_erreur.$file);
    		}
    		else
    		{
    			$date=$retour[date];
    			$annee=$retour[annee];
    			$mois=$retour[mois];
    			$jour_num=$retour[jour_num];
    			$jour_nom=$retour[jour_nom];
    			$dest=$rep_dest.$annee.'/'.$mois.'/'.$jour_num.'/';
    			if(!is_dir($rep_dest.$annee.'/'))
    			{
    			mkdir($rep_dest.$annee.'/', 0755);
    			chmod($rep_dest.$annee.'/', 0755);			
    			}
    			if(!is_dir($rep_dest.$annee.'/'.$mois.'/'))
    			{
    			mkdir($rep_dest.$annee.'/'.$mois.'/', 0755);
    			chmod($rep_dest.$annee.'/'.$mois.'/', 0755); 
    			}
    			if(!is_dir($rep_dest.$annee.'/'.$mois.'/'.$jour_num.'/'))
    			{
    			mkdir($rep_dest.$annee.'/'.$mois.'/'.$jour_num.'/', 0755);
    			chmod($rep_dest.$annee.'/'.$mois.'/'.$jour_num.'/', 0755); 
    			}
    			$img_finale=$file.'_'.$date.'.jpg';
    			$rep_tn_finale=$dest.'/thumbnail/';
    			$tn_finale=$rep_tn_finale.'TN-'.$file.'_'.$date.'.jpg';
    			rename($img,$dest.$img_finale);
    			miniature($dest,$img_finale,$rep_tn_finale,$tn_finale);
    			unset($exif_tab);
    			sleep(0.5);
    		}
    	}
    	$compteur_lot++;
    }
    if ($compteur_lot > 30)
    {
    	echo "<script language='javascript'>document.location.href='".$_SERVER['PHP_SELF']."';</script>";
    }
    else
    {
    	echo "Traitement terminé :<br />";
    	echo "Fichiers en erreur :";
    	echo '<table>';
    	while (($file = readdir($entree_erreur)) !== false) 
    	{
    		if (is_file($rep_erreur.$file) && $file !="." && $file !="..")
    		{
    			echo '<tr>';
    			echo '<td><a href="'.$rep_erreur.$file.'">'.$rep_erreur.$file.'</a></td>';
    			echo '</tr>';
    		}
    	}
    	echo '</table>';
    }
    ?>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. "Traitement par lot" possible ?
    Par Luscinia dans le forum Dreamweaver
    Réponses: 3
    Dernier message: 03/11/2008, 00h14
  2. Traitement par lot pour rajouter un copyright.
    Par Tristan_C dans le forum Imagerie
    Réponses: 3
    Dernier message: 11/10/2008, 13h04
  3. [Data] Traitement par lot
    Par titeuf92 dans le forum Spring
    Réponses: 1
    Dernier message: 25/03/2008, 11h51
  4. Réponses: 6
    Dernier message: 31/01/2008, 06h34
  5. Utiliser Log4J comme sortie d'un traitement par lots.
    Par Pierre8r dans le forum Logging
    Réponses: 1
    Dernier message: 24/11/2007, 11h34

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