Subversion Repositories eFlore/Applications.cel

Rev

Rev 1198 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
416 aurelien 1
<?php
1224 jpm 2
// declare(encoding='UTF-8');
416 aurelien 3
/**
1224 jpm 4
 * Réalise la maintenance des images.
5
 * Action :
6
 * - suppression_images_orphelines : supprime les images qui ne sont plus dans la bdd.
7
 * Utilisation : /opt/lampp/bin/php cli.php ImagesMaintenance suppression_images_orphelines
8
 *
9
 * @category	php 5.2
10
 * @package		Cel/Scripts
11
 * @author		Aurelien PERONNET <aurelien@tela-botanica.org>
12
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
13
 * @copyright	Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org)
14
 * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
15
 * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
16
 * @version		$Id$
17
 */
18
class ImagesMaintenance {
416 aurelien 19
 
1224 jpm 20
	private $bdd = null;
21
	private $script = null;
22
	private $chemin_base_images = '';
23
	private $nbFichiersSupprimes = 0;
24
	private $espaceLibere = 0;
416 aurelien 25
 
1224 jpm 26
	public function __construct(Conteneur $conteneur) {
27
		$this->chemin_base_images = $conteneur->getParametre('cel.chemin_images');
28
		$this->bdd = $conteneur->getBdd();
29
		$this->script = $conteneur->getScript();
30
	}
31
 
32
	public function executer($arguments) {
33
		if (isset($arguments[0]) == false) {
34
			throw new Exception("Veuillez indiquer l'action à réaliser en paramètre.", E_USER_ERROR);
416 aurelien 35
		}
1224 jpm 36
		$action = $arguments[0];
37
		switch ($action) {
38
			case 'suppression_images_orphelines' :
39
				$this->supprimerFichiersImagesOrphelins();
40
				break;
41
		}
416 aurelien 42
	}
43
 
1224 jpm 44
	private function supprimerFichiersImagesOrphelins() {
45
       	$profondeur = 1;
46
		$this->itererRecursivement($this->chemin_base_images, $profondeur);
416 aurelien 47
 
1224 jpm 48
		print "Suppression des images orphelines effectuées\n";
49
		$fichiersSupprimes = $this->nbFichiersSupprimes;
50
		print "Fichiers orphelins détectés et supprimés : $fichiersSupprimes\n";
51
		$espaceLibere = $this->convertirOctets($this->espaceLibere);
52
		print "Espace disque économisé : $espaceLibere \n";
436 aurelien 53
	}
54
 
1224 jpm 55
	private function itererRecursivement($dossier, $profondeur) {
56
		$dossiersAIgnorer = array('export');
57
		$iterateur = new DirectoryIterator($dossier);
58
		foreach ($iterateur as $element) {
59
			if ($element->isDot() || in_array($element->getBasename(), $dossiersAIgnorer)) {
436 aurelien 60
				continue;
61
			}
1224 jpm 62
 
63
			$indentation = str_repeat("\t", ($profondeur - 1));
64
		    if ($element->isDir()) {
436 aurelien 65
		    	$profondeur_dossier_fils = $profondeur + 1;
1224 jpm 66
		    	print "$indentation Analyse dossier : {$element->getPathname()}\n";
67
	    		$this->itererRecursivement($element->getPathname(), $profondeur_dossier_fils);
68
		    } else {
69
		    	print "$indentation Vérif fichier : {$element->getBasename()}\n";
70
		    	$existe = $this->verifierPresenceImageDansBdd($element);
71
		    	if ($existe == false) {
72
		    		$this->supprimerFichierImage($element);
73
		    	}
436 aurelien 74
		    }
75
		}
76
	}
1224 jpm 77
 
78
	private function verifierPresenceImageDansBdd($element) {
79
		$existe = true;
80
		$nom_fichier = $element->getFilename();
81
		if (preg_match('/^([0-9]{3})_([0-9]{3})_([0-9]{3})_[^.]+[.](jpg|xml)$/', $nom_fichier, $match)) {
82
			$id_image = $match[1].$match[2].$match[3];
83
			$id_image = ltrim($id_image, '0');
84
 
85
			$requete = 'SELECT COUNT(ci_id_image) AS image_existe '.
86
				'FROM cel_images '.
87
				"WHERE ci_id_image = $id_image ";
88
 
89
			$imageExiste = $this->bdd->requeter($requete, Bdd::SQL_RETOUR_COLONNE);
90
			if ($imageExiste < 1) {
91
				print "Image $id_image introuvable dans la base de données\n";
92
				$existe = false;
93
			}
436 aurelien 94
		}
1224 jpm 95
		return $existe;
436 aurelien 96
	}
416 aurelien 97
 
1224 jpm 98
	private function supprimerFichierImage($element) {
99
		$fichier = $element->getPathname();
100
		$fichierNom = $element->getBasename();
101
		if (file_exists($fichier)) {
102
			$this->espaceLibere += $element->getSize();
103
			if (unlink($fichier) === false) {
104
				throw new Exception("Problème lors de la suppression du fichier : $fichier \n", E_USER_ERROR);
436 aurelien 105
			} else {
1224 jpm 106
				$this->nbFichiersSupprimes++;
107
				print "Suppression du fichier : $fichierNom\n";
436 aurelien 108
			}
109
		} else {
1224 jpm 110
			throw new Exception("Problème le fichier n'existe pas : $fichier\n", E_USER_ERROR);
436 aurelien 111
		}
1224 jpm 112
	}
436 aurelien 113
 
1224 jpm 114
	private function convertirOctets($taille) {
115
	    $units = array('B', 'KB', 'MB', 'GB', 'TB');
116
	    for ($i = 0; $taille >= 1024 && $i < 4; $i++) $taille /= 1024;
117
	    return round($taille, 2).' '.$units[$i];
436 aurelien 118
	}
416 aurelien 119
}
1224 jpm 120
?>