Codulle - L'explorateur de code sources

Accueil>> AlBulle >> Albulle1.0rc2

Informations fichier

Nom du fichier : util.class.php
Taille du fichier : 27 Ko (730 lignes)
Language : PHP

  1. span style="color: #808080; font-style: italic;">////////////////////////////////////////
  2. // Encodage du fichier : UTF-8
  3. // Utilisation des tabulations : Oui
  4. // 1 tabulation = 4 caractères
  5. // Fins de lignes = LF (Unix)
  6. ////////////////////////////////////////
  7.  
  8. ///////////////////////////////
  9. // LICENCE
  10. ///////////////////////////////
  11. //
  12. // © DUCARRE Cédric (SamRay1024), Bubulles Créations, (09/05/2005)
  13. //
  14. // webmaster@jebulle.net
  15. // http://jebulle.net
  16. //
  17. // Ce fichier fait partie d'AlBulle, script de gestion d'albums photos.
  18. //
  19. // Ce logiciel est régi par la licence CeCILL soumise au droit français et
  20. // respectant les principes de diffusion des logiciels libres. Vous pouvez
  21. // utiliser, modifier et/ou redistribuer ce programme sous les conditions
  22. // de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
  23. // sur le site "http://www.cecill.info".
  24. //
  25. // En contrepartie de l'accessibilité au code source et des droits de copie,
  26. // de modification et de redistribution accordés par cette licence, il n'est
  27. // offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons,
  28. // seule une responsabilité restreinte pèse sur l'auteur du programme, le
  29. // titulaire des droits patrimoniaux et les concédants successifs.
  30. //
  31. // A cet égard l'attention de l'utilisateur est attirée sur les risques
  32. // associés au chargement, à l'utilisation, à la modification et/ou au
  33. // développement et à la reproduction du logiciel par l'utilisateur étant
  34. // donné sa spécificité de logiciel libre, qui peut le rendre complexe à
  35. // manipuler et qui le réserve donc à des développeurs et des professionnels
  36. // avertis possédant des connaissances informatiques approfondies. Les
  37. // utilisateurs sont donc invités à charger et tester l'adéquation du
  38. // logiciel à leurs besoins dans des conditions permettant d'assurer la
  39. // sécurité de leurs systèmes et ou de leurs données et, plus généralement,
  40. // à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
  41. //
  42. // Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
  43. // pris connaissance de la licence CeCILL, et que vous en avez accepté les
  44. // termes.
  45. //
  46. ///////////////////////////////
  47.  
  48.  
  49. /**
  50. * Librairie de fonctions inclassables.
  51. *
  52. * @author SamRay1024
  53. * @copyright Bubulles Creation - http://jebulle.net
  54. * @since 31/10/2006
  55. * @version 1.6
  56. *
  57. *//**
  58. * Redimensionner une image.
  59. *
  60. * @param [RESOURCE] $img_src Contenu binaire de l'image à redimensionner.
  61. * @param [INTEGER] $larg_mini_max Largeur max de la redimension.
  62. * @param [INTEGER] $haut_mini_max Hauteur max de la redimension.
  63. *
  64. * @return [RESOURCE] Contenu binaire de l'image redimensionnée.
  65. */// On recupere les dimensions de l'image que l'on souhaite redimensionner
  66. // Cree une image vierge de la dimension desiree. Cette fonction permet de ne pas etre limite a 256 couleurs contrairement a "ImageCreate"
  67. 'largeur'], $aNouvellesDimensions['hauteur'] );
  68.  
  69. // On effectue une copie de l'image source vers la miniture
  70. 'largeur'], $aNouvellesDimensions['hauteur'/**
  71. * Calcul les nouvelles dimensions d'une image.
  72. *
  73. * @param [INTEGER] $iLargeurInitiale Largeur initiale de l'image.
  74. * @param [INTEGER] $iHauteurInitiale Hauteur initiale de l'image.
  75. * @param [INTEGER] $iLargeurDemandee Largeur finale souhaitée.
  76. * @param [INTEGER] $iHauteurDemandee Hauteur finale souhaitée.
  77. * @return [ARRAY] Retourne un tableau associatif qui contient les nouvelles dimensions.
  78. * $aResultat['largeur'] & $aResultat['hauteur']
  79. */'largeur' => 0, 'hauteur' => 0 );
  80.  
  81. // si l'image est plus petite que les dimensions demandees, on ne redimensionne pas.
  82. // Pour cela, on force la valeur de la dimension souhaitee a la valeur de la taille de l'image
  83. // de sorte a creer un ratio de 1 pour la dimension
  84. // On calcule le ratio pour la largeur et la hauteur
  85. $fRatioLargeur = $iLargeurDemandee / $iLargeurInitiale;
  86. $fRatioHauteur = $iHauteurDemandee / $iHauteurInitiale;
  87.  
  88. // Et on garde le plus petit afin de ne jamais depasser la taille maximale
  89. $fRatioFinal = ( $fRatioLargeur <= $fRatioHauteur ) ? $fRatioLargeur : $fRatioHauteur;
  90.  
  91. // Connaissant le ratio de la miniature, on peut donc obtenir ses dimensions reelles.
  92. // Ici, on utilise la fonction "round" pour avoir une valeur entiere. Cela nous donne le nombre de pixels que va faire la miniature.
  93. $aResultat['largeur''hauteur'/**
  94. * Traitement d'une image postée par formulaire pour écriture dans un dossier.
  95. *
  96. * Adaptee de http://lecyber.net
  97. *
  98. * Cette méthode permet de traiter une image envoyée par un formulaire. L'image est redimensionnée aux dimensions
  99. * souhaitées (uniquement si elle est plus grande que les dimensions demandées), écrite dans le dossier demandé
  100. * et son nom de fichier peut être préfixé.
  101. *
  102. * @param [STRING] $type Type MIME de l'image envoyée (ie : 'image/gif', 'image.jpg', ...).
  103. * @param [STRING] $srcFile Chemin d'accès complet à l'image que l'on souhaite redimensionner.
  104. * @param [STRING] $destFile Répertoire de destination de stockage de l'image redimensionnée.
  105. * @param [STRING] [$larg_mini_max] Largeur max de la miniature.
  106. * @param [STRING] [$haut_mini_max] Lauteur max de la miniature.
  107. * @param [STRING] [$prefixe] Si ce champ est indiqué, on génère une miniature préfixé de la chaîne que contient cette variable
  108. * sinon, on écrase le fichier d'entrée si le dossier de destination est le même que celui de l'image originale.
  109. * @param [INTEGER] [$iQualite] Uniquement pour les images Jpeg : permet de régler la qualité des miniatures sur une échelle de 0 à 100.
  110. * 75 : par défaut
  111. * 0 : mauvaise qualité, petit fichier
  112. * 100 : meilleure qualité, gros fichier
  113. * @return [STRING] Chemin d'accès à la miniature qui vient d'être générée.
  114. */'', $iQualite = 75 )
  115. {
  116.  
  117. // Recuperation des infos du fichier de destination
  118. // chemin d'acces
  119. // nom du fichier
  120.  
  121. // on reecrit le fichier de destination avec le prefixe et le chemin complet
  122. '/'// creation de l'image en fonction du type MIME
  123. 'image/pjpeg''image/jpeg''image/x-png''image/png''image/gif'// si les deux longeurs max sont nulles, alors on ne redimensionne pas l'image
  124. // Si un second parametre est indique a la fonction ImageJpeg, la miniature est sauvegardee mais elle ne sera pas affichee. Ex : ImageJpeg( $img_src, './miniatures/mini.jpg');
  125. 'image/pjpeg''image/jpeg':
  126. // ecriture de la miniature au format jpeg
  127. 'image/x-png''image/png':
  128. // ecriture de la miniature au format png
  129. 'image/gif':
  130. // ecriture de la miniature au format gif
  131. // destruction du tampon de l'image
  132. /**
  133. * Méthode avancée de lecture de dossiers.
  134. *
  135. * La méthode reçoit un chemin de dossier, ouvre ce dossier et en donne la liste des éléments, qui
  136. * peuvent être ou les dossiers, ou les fichiers, ou les deux.
  137. *
  138. * Les éléments lus du dossiers sont retournés dans un tableau de deux manières différentes. Pour
  139. * les cas où soit les dossiers, soit les fichiers sont demandés, le tableau retourné est un tableau
  140. * indexé classique à une dimension. En revanche pour le cas ou les deux types sont demandés, le tableau
  141. * retourné est un tableau à deux dimensions. La 1ère est associative et contient deux sous-tableaux :
  142. * l'un pour les dossiers, l'autre pour les fichiers.
  143. *
  144. * $aTableauRetour['dir'] contient les dossiers lus.
  145. * $aTableauRetour['file'] contient les fichiers lus.
  146. *
  147. * Les deux sous tableaux sont eux indexés classiquement, tout comme les tableaux de retour sur l'un
  148. * ou l'autre des types demandés (dossiers/fichiers).
  149. *
  150. * @param [STRING] $sDir Chemin du dossier à parcourir.
  151. * @param [STRING] $sMode Modes de parcours du dossier :
  152. * 'DOSSIERS_SEULEMENT' => retourne uniquement les dossiers.
  153. * 'FICHIERS_SEULEMENT' => retourne uniquement les fichiers.
  154. * 'TOUT' => retourne tous les éléments (dossiers ET fichiers).
  155. * @param [ARRAY] $aFiltresDossiers Optionnel. Tableau de dossiers qui ne doivent pas être pris en compte.
  156. * @param [ARRAY] $aFiltresExtensions Optionnel. Tableau à utiliser pour ne garder que les fichiers qui correspondent
  157. * aux extensions données.
  158. * Les extensions doivent être de la forme 'jpg', 'gif', 'exe', ...
  159. * @return [MIXED] FALSE en cas d'erreur, tableau des éléments lus sinon.
  160. */// creation du tableau qui va contenir les elements du dossier
  161. // ajout du slash a la fin du chemin s'il n'y est pas
  162. "/^.*\/$/"'/';
  163.  
  164. // Ouverture du repertoire demande
  165. // si pas d'erreur d'ouverture du dossier on lance le scan
  166. // Parcours du repertoire
  167. '.' && $sItem != '..'// Extraction de l'extension si filtrage sur extensions demandé
  168. '.'// Ajout si autorisé
  169. // Fermeture du repertoire
  170. // Tri des dossiers
  171. // construction tableau retour
  172. 'DOSSIERS_SEULEMENT''FICHIERS_SEULEMENT''TOUT''dir''file'/**
  173. * Génération d'une liste de liens pour faire une pagination.
  174. *
  175. * Cette méthode est une adaptation de celle fourni dans PunBB, le
  176. * script de forums.
  177. *
  178. * ****
  179. * Copyright (C) 2002-2005 Rickard Andersson (rickard@punbb.org)
  180. *
  181. * This function is part of PunBB.
  182. *
  183. * PunBB is free software; you can redistribute it and/or modify it
  184. * under the terms of the GNU General Public License as published
  185. * by the Free Software Foundation; either version 2 of the License,
  186. * or (at your option) any later version.
  187. *
  188. * PunBB is distributed in the hope that it will be useful, but
  189. * WITHOUT ANY WARRANTY; without even the implied warranty of
  190. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  191. * GNU General Public License for more details.
  192. *
  193. * You should have received a copy of the GNU General Public License
  194. * along with this program; if not, write to the Free Software
  195. * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  196. * MA 02111-1307 USA
  197. * ****
  198. *
  199. * @param [INTEGER] $num_pages Le nombre de pages total.
  200. * @param [INTEGER] $cur_page La page courante.
  201. * @param [STRING] $link_to La destination des url qu'il faut placer dans les liens.
  202. * @return [STRING] Retourne la liste des liens au format HTML.
  203. */// If $cur_page == -1, we link to all pages (used in viewforum.php)
  204. '<span class="pageActive">1</span>''<a href="''&amp;page=1" class="page">1</a>''<span>&hellip;</span>';
  205. }
  206.  
  207. // Don't ask me how the following works. It just does, OK? :-)
  208. '<a href="''&amp;page=''" class="page">''</a>''<span class="pageActive">''</span>''<span>&hellip;</span>';
  209.  
  210. $pages[] = '<a href="''&amp;page=''" class="page">''</a>'/*'&#160;'*/'', $pages);
  211. }
  212.  
  213. /**
  214. * Extraire à gauche de la n-ième sous-chaîne.
  215. *
  216. * Extrait d'une chaine tout ce qui se trouve à gauche de la n-ième sous-chaine
  217. * spécifiée. Par exemple, pour extraire les chemins parents dans une chaine de
  218. * caractères qui contient un chemin :
  219. * echo SousChaineGauche( 'dossier1/dossier2/dossier3/dossier4', '/', 2 );
  220. * => Affiche : dossier1/dossier2
  221. *
  222. * @param [STRING] $sChainePrincipale La chaine dans laquelle on doit faire l'extraction.
  223. * @param [STRING] $sSousChaine La chaine à repérer.
  224. * @param [INTEGER] $iNbOccurences Le nombre d'occurences à partir duquel on garde ce qui se trouve
  225. * à gauche de la sous-chaine.
  226. * @return [STRING] Retourne $sChainePrincipale tronquée.
  227. */''/**
  228. * Extraire à droite de la n-ième sous-chaîne.
  229. *
  230. * Extrait d'une chaine tout ce qui se trouve à droite de la n-ième sous-chaîne
  231. * spécifiée. Par exemple, pour extraire les dossiers enfants dans une chaîne de
  232. * caractères qui contient un chemin :
  233. * echo sousChaineDroite( 'dossier1/dossier2/dossier3/dossier4', '/', 2 );
  234. * => Affiche : dossier3/dossier4
  235. *
  236. * @param [STRING] $sChainePrincipale La chaine dans laquelle on doit faire l'extraction.
  237. * @param [STRING] $sSousChaine La chaine à repérer.
  238. * @param [INTEGER] $iNbOccurences Le nombre d'occurences à partir duquel on garde ce qui se trouve
  239. * à droite de la sous-chaine.
  240. * @return [STRING] Retourne $sChainePrincipale tronquée.
  241. */''/**
  242. * Nettoyer une chaine de chemin d'accès qui provient d'une URL.
  243. *
  244. * Cette méthode permet le nettoyage d'une chaine qui représente un chemin vers un dossier quelconque.
  245. * Elle est destinée à eviter les failles d'accès à des dossiers interdits par une URL. Elle se charge
  246. * donc de repérer les dossiers vides ('//'), les noms tels './' et '../'. En plus, il est possible
  247. * de demander à la méthode d'interdire des dossiers spécifiques dont vous passez le nom par
  248. * l'intermédiaire d'un tableau.
  249. *
  250. * La chaine étant passée par référence, elle n'est pas retournée par la méthode et est directement
  251. * utilisable dans le fichier appelant.
  252. *
  253. * @param [STRING] $sChaine Passée par référence, la chaine est nettoyée des dossiers interdits.
  254. * @param [ARRAY] $aDossiersInterdits Optionnel. Contient une liste de dossiers interdits.
  255. * @return [ARRAY] Retourne la chaine d'accès sous forme de tableau (pour des traitements ultérieurs)
  256. */'';
  257.  
  258. // On eclate le chemin dans un tableau extraire chaque dossier
  259. '/', $sChaine );
  260.  
  261. // on calcul le nombres de dossiers passés dans l'url
  262. // Si des dossiers sont interdits, on construit la fin de l'expression régulière
  263. '|'// nettoyage des dossiers, pour enlever les chaines vides, les accès du type ./ et ../
  264. // et les dossiers interdits
  265. '''/^[.]+$''/'// reconstruction des index du tableau (utilisation d'un tableau vide pour corriger un bogue intervenant occasionnellement)
  266. // Reconstruction de la chaine d'accès nettoyée
  267. '/'/**
  268. * Prépare un chemin d'accès à un fichier pour être utilisé comme Url (href ou src).
  269. *
  270. * @param [STRING] $sUrl Le chemin à formater.
  271. * @param [BOOLEAN] $bSansSlashs Si True, les slashs ne seront pas encodés.
  272. * @return [STRING] L'Url formatée.
  273. */'%2F', '/', $sUrl ) : $sUrl;
  274. }
  275.  
  276. /**
  277. * Enlèver le préfixe d'une chaine.
  278. *
  279. * Permet d'effacer tout ce qui se trouve avant un séparateur dans une chaine.
  280. * Le séparateur est lui aussi effacé. Si des espaces se trouvent après le séparateur,
  281. * ils sont de même supprimés.
  282. *
  283. * @param [STRING] $sChaineANettoyer La chaîne dans laquelle enlever un préfixe.
  284. * @param [STRING] $sMarqueur La chaîne qui marque la fin du préfixe.
  285. * @return [STRING] La chaîne nettoyées.
  286. */// Recherche du séparateur
  287. // Extraction de ce qui ce trouve à gauche de la position trouvée
  288. // Si la chaine lue à gauche du séparateur est bien un entier, on peut alors l'enlever
  289. // car on est certain qu'il représente le préfixe.
  290. /**
  291. * Parse un fichier pour remplacer ses pseudos-variables.
  292. *
  293. * Le tableau à passer en paramètres doit être associatif. Les clés de ce tableau doivent
  294. * représenter les éléments à remplacer dans le fichier. Ces clés doivent alors être des
  295. * expression régulières.
  296. *
  297. * De plus, le tableau peut être soit à une dimension soit à deux. Un tableau à une dimension
  298. * signifie que vous parsez un fichier simple. Un tableau à deux dimensions signifie que
  299. * vous devez parser le fichier autant de fois qu'il y a de valeurs dans la première dimension.
  300. *
  301. * En d'autres termes, le remplacement de données dans un fichier simple conduit à présenter un
  302. * tableau de la façon suivante :
  303. * $aElements['/{MON_ELEMENT_1}/'] = 'ce qui va être mis à la place';
  304. * ...
  305. *
  306. * Et pour boucler sur le fichier :
  307. * $aElements[0]['/{MON_ELEMENT_1}/'] = 'ce qui va être mis à la place';
  308. * $aElements[0]['/{MON_ELEMENT_2}/'] = '...';
  309. * ...
  310. * $aElements[1]['/{MON_ELEMENT_1}/'] = '...';
  311. * $aElements[1]['/{MON_ELEMENT_2}/'] = '...';
  312. * ...
  313. *
  314. * /!\ Si le tableau passé en paramètre est à deux dimensions, il faut définir le dernier
  315. * paramètre à True.
  316. *
  317. * @param [String] $sCheminFichier Le chemin d'accès au fichier à parser.
  318. * @param [String] $aElementsARemplacer Le tableau dont les clés sont les expressions régulières d'accès aux pseudo-variables
  319. * et les valeurs le contenu à remplacer.
  320. * @param [Boolean] $bBoucler Optionnel. Si vrai, c'est que le tableau est bi-dimensionnel, donc qu'il s'agit de boucler
  321. * sur plusieurs éléments.
  322. * @return [String] Le contenu du fichier parsé.
  323. */// Lecture fichier et remplacement des pseudos-variables
  324. // Extraction des patterns à remplacer
  325. ''/**
  326. * Créé une liste HTML dont chaque puce représente une information EXIF d'une image au format JPEG.
  327. *
  328. * Les informations retournées par cette méthode sont les suivantes :
  329. * Marque et modèle de l'appareil photo, date et heure de la photo, temps d'exposition,
  330. * sensibilité ISO, ouverture et longueur de la focale.
  331. *
  332. * @param [STRING] $sCheminImage Le chemin d'accès à l'image dont on souhaite obtenir les infos EXIF.
  333. * @return [STRING] Si la photo ne possède pas de données EXIF, une simple phrase est retournée. Sinon
  334. * la méthode retourne une liste <ul>...</ul> avec un élément <li>...</li> par donnée.
  335. * La liste <ul> possède un identifiant, "exif", pour repérer la liste avec une feuille
  336. * de style CSS.
  337. */"<ul id=\"exif\">\n\t"'inconnue''exif_imagetype''ANY_TAG''IFDO'// Marque appareil
  338. '<li><span>Marque de l\'appareil : </span>''Make''IFD0''IFD0']['Make'] !== '''IFD0']['Make''</li>';
  339.  
  340. // Modèle appareil
  341. '<li><span>Modèle de l\'appareil : </span>''Model''IFD0''IFD0']['Model'] !== '''IFD0']['Model''</li>''EXIF'// Date/heure
  342. '<li><span>Date/Heure de la prise de vue : </span>''DateTimeOriginal''EXIF''EXIF']['DateTimeOriginal'] !== '''EXIF']['DateTimeOriginal''</li>';
  343.  
  344. // Temps exposition
  345. '<li><span>Temps d\'exposition : </span>''ExposureTime''EXIF''EXIF']['ExposureTime'] !== '''EXIF']['ExposureTime''</li>';
  346.  
  347. // ISO
  348. '<li><span>Sensibilité ISO : </span>''ISOSpeedRatings''EXIF''EXIF']['ISOSpeedRatings'] !== '''EXIF']['ISOSpeedRatings''</li>';
  349.  
  350. // Longueur focale
  351. '<li><span>Longueur de la focale : </span>''FocalLength''EXIF''EXIF']['FocalLength'] !== '''EXIF']['FocalLength''</li>''COMPUTED'// Ouverture focale
  352. '<li><span>Ouverture de la focale : </span>''ApertureFNumber''COMPUTED''COMPUTED']['ApertureFNumber'] !== '''COMPUTED']['ApertureFNumber''</li>'''''''"</ul>\n"/**
  353. * Tronque la chaîne de catactères passée en paramètre pour la réduire à iNbCaracteres.
  354. * La chaine est complétée avec '...' pour indiquer qu'elle n'est pas complète.
  355. *
  356. * @param [STRING] $sChaineATronquer La chaîne que l'on souhaite tronquer.
  357. * @param [STRING] $iNbCaracteres Le nombres de caractères maximals que doit faire la chaine depuis le début.
  358. * @return [STRING] La chaîne tronquée + '...'.
  359. */'...''';
  360. }
  361.  
  362. /**
  363. * Lit le type MIME d'une image.
  364. *
  365. * La fonction fonctionne de deux façons différentes :
  366. * - si les extensions pour le support EXIF sont chargées : utilisation de la fonction exif_imagetype.
  367. * Tous les formats d'images sont alors supportés.
  368. * - si les extensions ne sont pas chargées : code perso qui lit l'extension du fichier pour en déterminer
  369. * le type MIME. Seul sont détectées les jpg, gif et png.
  370. *
  371. * Les valeurs de retour possibles sont les suivantes :
  372. * - image/jpeg
  373. * - image/gif
  374. * - image/png
  375. *
  376. * @param [STRING] $sCheminImg Chemin d'accès au fichier dont on veut le type MIME.
  377. * @return [STRING] Type MIME.
  378. */'exif_imagetype''.''jpg''jpeg''jpe': $sTypeMime = 'image/jpeg''gif': $sTypeMime = 'image/gif''png': $sTypeMime = 'image/png'

Liste des projets

Téléchargez Codulle

Publié par Codulle - v0.1.1 - © Bubulles Creations