Subversion Repositories eFlore/Applications.cel

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
416 aurelien 1
<?php
2
 
3
/**
4
 
5
 Aurelien Peronnet aurelienperonnet@gmail.com 2008
6
 
7
 Ce logiciel est r?gi par la licence CeCILL soumise au droit fran?ais et
8
 respectant les principes de diffusion des logiciels libres. Vous pouvez
9
 utiliser, modifier et/ou redistribuer ce programme sous les conditions
10
 de la licence CeCILL telle que diffus?e par le CEA, le CNRS et l'INRIA
11
 sur le site "http://www.cecill.info".
12
 En contrepartie de l'accessibilit? au code source et des droits de copie,
13
 de modification et de redistribution accord?s par cette licence, il n'est
14
 offert aux utilisateurs qu'une garantie limit?e.  Pour les m?mes raisons,
15
 seule une responsabilit? restreinte p?se sur l'auteur du programme,  le
16
 titulaire des droits patrimoniaux et les conc?dants successifs.
17
 
18
 A cet ?gard  l'attention de l'utilisateur est attir?e sur les risques
19
 associ?s au chargement,  ? l'utilisation,  ? la modification et/ou au
20
 d?veloppement et ? la reproduction du logiciel par l'utilisateur ?tant
21
 donn? sa sp?cificit? de logiciel libre, qui peut le rendre complexe ?
22
 manipuler et qui le r?serve donc ? des d?veloppeurs et des professionnels
23
 avertis poss?dant  des  connaissances  informatiques approfondies.  Les
24
 utilisateurs sont donc invit?s ? charger  et  tester  l'ad?quation  du
25
 logiciel ? leurs besoins dans des conditions permettant d'assurer la
26
 s?curit? de leurs syst?mes et ou de leurs donn?es et, plus g?n?ralement,
27
 ? l'utiliser et l'exploiter dans les m?mes conditions de s?curit?.
28
 
29
 Le fait que vous puissiez acc?der ? cet en-t?te signifie que vous avez
30
 pris connaissance de la licence CeCILL, et que vous en avez accept? les
31
 termes.
32
 
33
 */
34
 
35
 
36
// in : utf8
37
// out : utf8
38
/*
39
 * stockage_fichier.php
40
 *
41
 * Cas d'utilisation :
42
 * le service reçoit les informations d'upload d'une image et une id (nom de fichier)
43
 * et crée les miniatures associées à l'image et stocke le tout
44
 */
45
 
46
// traite l'upload d'une fichier et le deplace en le renommant selon un identtifiant donne
47
function stocker_fichier($fichier,$id,$chemin_base,$taillemax)
48
{
49
	$droits = 0755;
50
 
51
	$chemin_sur_serveur = $chemin_base ;
52
 
53
	$id = sprintf('%09s', $id) ;
54
	$id = wordwrap($id, 3 , '_', true) ;
55
 
56
	$id_fichier = $id.".jpg" ;
57
 
58
	$niveauDossier = split("_", $id) ;
59
 
60
	$dossierNiveau1 = $niveauDossier[0] ;
61
	$dossierNiveau2 = $niveauDossier[1] ;
62
 
63
	if(!file_exists($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S'))
64
	{
65
		if(mkdir($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S',$droits, true)) {
66
			chmod($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S',$droits);
67
		}
68
		else
69
		{
70
			$erreur =  'ERROR : probleme durant l\'écriture du dossier s \n' ;
71
			$this->logger('CEL_bugs',$erreur);
72
			return false;
73
		}
74
	}
75
 
76
	if(!file_exists($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/M'))
77
	{
78
		if(mkdir($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/M',$droits, true)) {
79
			chmod($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/M',$droits);
80
		}
81
		else
82
		{
83
			$erreur =  'ERROR : probleme durant l\'écriture du dossier m \n' ;
84
			$this->logger('CEL_bugs',$erreur);
85
			return false;
86
		}
87
	}
88
 
89
	if(!file_exists($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/L'))
90
	{
91
		if(mkdir($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/L',$droits, true)) {
92
			chmod($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/L',$droits);
93
		}
94
		else
95
		{
96
			$erreur =  'ERROR : probleme durant l\'écriture du dossier l \n' ;
97
			$this->logger('CEL_bugs',$erreur);
98
			return false;
99
		}
100
	}
101
 
102
	$chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2 ;
103
 
104
	$chemin_fichier = $chemin_sur_serveur_final.'/L/'.$id.".jpg" ;
105
 
106
	if(move_uploaded_file($fichier['tmp_name'],$chemin_fichier))
107
	{
108
		// on redimensionne
109
		list($width, $height) = getimagesize($chemin_fichier);
110
 
111
		$small_width = 100;
112
		$small_height = 100;
113
 
114
		$medium_width = 300;
115
		$medium_height = 300;
116
 
117
		// on reechantillonne
118
		$image_p = imagecreatetruecolor($small_width, $small_height);
119
		$image_m = imagecreatetruecolor($medium_width, $medium_height);
120
		$image_l = imagecreatetruecolor($width, $height);
121
 
122
		$image = imagecreatefromjpeg($chemin_fichier);
123
 
124
        $ratio_compression = 100 ;
125
 
126
        if(filesize($chemin_fichier) >= $taillemax) {
127
            $ratio_compression = 85 ;
128
        }
129
 
130
		if($image == null)
131
		{
132
			$erreur =  'ERROR : probleme durant la création des images resamplées l \n' ;
133
			$this->logger('CEL_bugs',$erreur);
134
			return false ;
135
		}
136
 
137
		// et on copie les nouvelles images (pour la galerie et la liste)
138
		imagecopyresampled($image_p, $image, 0, 0, 0, 0, $small_width, $small_height, $width, $height);
139
		imagecopyresampled($image_m, $image, 0, 0, 0, 0, $medium_width, $medium_height, $width, $height);
140
		imagecopyresampled($image_l, $image, 0, 0, 0, 0, $width, $height, $width, $height);
141
 
142
		imagejpeg($image_p, $chemin_sur_serveur_final.'/S/'.$id.'_S.jpg', 85);
143
		chmod($chemin_sur_serveur_final.'/S/'.$id.'_S.jpg',$droits);
144
 
145
		imagejpeg($image_m,$chemin_sur_serveur_final.'/M/'.$id.'_M.jpg', 85);
146
		chmod($chemin_sur_serveur_final.'/M/'.$id.'_M.jpg',$droits);
147
 
148
		imagejpeg($image_l,$chemin_sur_serveur_final.'/L/'.$id.'_L.jpg', $ratio_compression);
149
		chmod($chemin_sur_serveur_final.'/L/'.$id.'_L.jpg',$droits);
150
 
151
		unlink($chemin_fichier) ;
152
 
153
  		return true ;
154
  	}
155
  	else
156
  	{
157
  		$erreur =  'ERROR : probleme durant le déplacement du fichier temporaire \n' ;
158
		$this->logger('CEL_bugs',$erreur);
159
  		return false ;
160
  	}
161
}
162
 
163
function supprimer_fichier($id,$chemin_base)
164
{
165
	$chemin_sur_serveur = $chemin_base ;
166
 
167
	$id = sprintf('%09s', $id) ;
168
	$id = wordwrap($id, 3 , '_', true) ;
169
 
170
	$id_fichier = $id.".jpg" ;
171
 
172
	$niveauDossier = split("_", $id) ;
173
 
174
	$dossierNiveau1 = $niveauDossier[0] ;
175
	$dossierNiveau2 = $niveauDossier[1] ;
176
 
177
	$fichier_s = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S/'.$id.'_S.jpg' ;
178
	$fichier_m = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/M/'.$id.'_M.jpg' ;
179
	$fichier_l = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/L/'.$id.'_L.jpg' ;
180
 
181
	if(file_exists($fichier_s))
182
	{
183
		$suppression_s = unlink($fichier_s) ;
184
 
185
		if(!$suppression_s) {
186
			$erreur =  'ERROR : probleme durant la suppression de l\'image '.$fichier_s.' \n' ;
187
			$this->logger('CEL_images_bugs',$erreur);
188
		}
189
	} else {
190
		$erreur =  'ERROR : probleme : l\'image '.$fichier_s.' n\'existe pas \n' ;
191
		$this->logger('CEL_images_bugs',$erreur);
192
	} // Si le fichier existe
193
 
194
	if(file_exists($fichier_m))
195
	{
196
		$suppression_m = unlink($fichier_m) ;
197
		if(!$suppression_m) {
198
			$erreur =  'ERROR : probleme durant la suppression de l\'image '.$fichier_m.' \n' ;
199
			$this->logger('CEL_images_bugs',$erreur);
200
		}
201
	} else {
202
		$erreur =  'ERROR : probleme : l\'image '.$fichier_m.' n\'existe pas \n' ;
203
		$this->logger('CEL_images_bugs',$erreur);
204
	} // Si le fichier existe
205
 
206
	if(file_exists($fichier_l))
207
	{
208
		$suppression_l = unlink($fichier_l) ;
209
		if(!$suppression_l) {
210
			$erreur =  'ERROR : probleme durant la suppression de l\'image '.$fichier_l.' \n' ;
211
			$this->logger('CEL_images_bugs',$erreur);
212
		}
213
	} else {
214
		$erreur =  'ERROR : probleme : l\'image '.$fichier_l.' n\'existe pas \n' ;
215
		$this->logger('CEL_images_bugs',$erreur);
216
	} // Si le fichier existe
217
 
218
	return true;
219
 
220
}
221
 
222
?>