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.