source: spip-zone/_plugins_/cache/trunk/inc/cache_api.php @ 113742

Last change on this file since 113742 was 113742, checked in by eric@…, 4 months ago

Sauvegarde intermédiaire avant d'arrêter pour aujourd'hui

  • Property svn:eol-style set to native
File size: 6.6 KB
Line 
1<?php
2/**
3 * Ce fichier contient les fonctions d'API de gestion des caches.
4 *
5 * @package SPIP\CACHE\API
6 */
7if (!defined('_ECRIRE_INC_VERSION')) {
8        return;
9}
10
11
12/**
13 * Ecrit un contenu dans le cache spécifié d'un plugin utilisateur.
14 *
15 * @api
16 *
17 * @param string $plugin
18 *        Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
19 *        ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
20 * @param array  $conteneur
21 *        Nom et extension du fichier cache.
22 * @param array  $contenu
23 *        Contenu sous forme de tableau à stocker dans un fichier cache après sérialisation.
24 *
25 * @return bool
26 */
27function cache_ecrire($plugin, $conteneur, $contenu) {
28
29        // Initialisation du retour de la fonction
30        $cache_ecrit = false;
31       
32        // Lecture de la configuration des caches du plugin.
33        // Si celle-ci n'existe pas encore elle est créée (cas d'un premier appel).
34        static $configuration = array();
35        if (!$configuration and (!$configuration = cache_configuration_lire($plugin))) {
36                $configuration = cache_cache_configurer($plugin);
37        }
38       
39        // Création du répertoire du cache à créer, si besoin.
40        if (!empty($conteneur['sous_dossier'])) {
41                // Si le conteneur nécessite un sous-dossier, appelé service dans l'identifiant du conteneur.
42                sous_repertoire($configuration['dossier_base'], rtrim($conteneur['sous_dossier'], '/'));
43        }
44
45        // Détermination du chemin du cache :
46        // - le nom sans extension est construit à partir des éléments fournis sur le conteneur et
47        //   de la configuration du nom pour le plugin.
48        if ($fichier_cache = cache_nommer($plugin, $conteneur, $configuration)) {
49                // Suivant que la configuration demande un sérialisation ou pas, on vérife le format du contenu
50                // de façon à toujours écrire une chaine.
51                $contenu_cache = '';
52                if ($configuration['serialisation']) {
53                        if (!is_array($contenu)) {
54                                $contenu_cache = $contenu_cache ? array($contenu_cache) : array();
55                        }
56                        $contenu_cache = serialize($contenu_cache);
57                } else {
58                        if (is_string($contenu)) {
59                                $contenu_cache = $contenu;
60                        }
61                }
62
63                // Ecriture du fichier cache sécurisé ou pas suivant la configuration.
64                include_spip('inc/flock');
65                $ecrire = 'ecrire_fichier';
66                if ($configuration['securisation']) {
67                        $ecrire = 'ecrire_fichier_securise';
68                }
69                $cache_ecrit = $ecrire($fichier_cache, $contenu_cache);
70        }
71       
72        return $cache_ecrit;
73}
74
75
76/**
77 * Lit la configuration des caches d'un plugin utilisateur.
78 *
79 * @api
80 *
81 * @param string $plugin
82 *        Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
83 *        ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
84 *
85 * @return array
86 *        Tableau de configuration des caches d'un plugin utilisateur ou tableau vide si aucune configuration n'est encore
87 *        enregistrée.
88 */
89function cache_configuration_lire($plugin) {
90
91        // Initialisation de la configuration à retourner
92        $configuration_lue = array();
93
94        if ($plugin) {
95                // Récupération de la meta du plugin Cache
96                include_spip('inc/config');
97                $configuration_lue = lire_config("cache/${plugin}", array());
98        }
99
100        return $configuration_lue;
101}
102
103
104/**
105 * Lit le cache spécifié d'un plugin donné et renvoie le contenu sous forme de tableau
106 * éventuellement vide.
107 *
108 * @api
109 *
110 * @param string $plugin
111 *        Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
112 *        ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
113 * @param string $nom_cache
114 *        Nom et extension du fichier cache.
115 *
116 * @return array|string|bool
117 *        Contenu du fichier sous la forme d'un tableau, d'une chaine ou false si une erreur s'est produite.
118 */
119function cache_lire($plugin, $conteneur) {
120
121        // Initialisation du contenu du cache
122        $cache_lu = false;
123       
124        // Lecture de la configuration des caches du plugin.
125        // Si celle-ci n'existe pas encore elle est créée (cas d'un premier appel, peu probable pour une lecture).
126        static $configuration = array();
127        if (!$configuration and (!$configuration = cache_configuration_lire($plugin))) {
128                $configuration = cache_cache_configurer($plugin);
129        }
130
131        // Détermination du nom du cache en fonction du plugin appelant et du type
132        if ($fichier_cache = cache_nommer($plugin, $conteneur, $configuration)) {
133                // Lecture du fichier cache sécurisé ou pas suivant la configuration.
134                include_spip('inc/flock');
135                $lire = 'lire_fichier';
136                if ($configuration['securisation']) {
137                        $lire = 'lire_fichier_securise';
138                }
139                $contenu_cache = '';
140                $lecture_ok = $lire($fichier_cache, $contenu_cache);
141               
142                if ($lecture_ok) {
143                        if ($configuration['serialisation']) {
144                                $cache_lu = unserialize($contenu_cache);
145                        } else {
146                                $cache_lu = $contenu_cache;
147                        }
148                }
149        }
150
151        return $cache_lu;
152}
153
154
155/**
156 * Renvoie le chemin complet du cache si celui-ci existe sinon renvoie une chaine vide.
157 *
158 * @api
159 *
160 * @param string $plugin
161 *        Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
162 *        ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
163 * @param array  $conteneur
164 *        Tableau identifiant le cache pour lequel on veut construire le nom.
165 * @param array  $configuration
166 *        Configuration complète des caches du plugin utlisateur.
167 *
168 * @return string
169 */
170function cache_existe($plugin, $conteneur) {
171
172        // Lecture de la configuration des caches du plugin.
173        // Si celle-ci n'existe pas encore elle est créée (cas d'un premier appel, peu probable pour cette fonction).
174        static $configuration = array();
175        if (!$configuration and (!$configuration = cache_configuration_lire($plugin))) {
176                $configuration = cache_cache_configurer($plugin);
177        }
178
179        // Détermination du nom du cache en fonction du plugin appelant et du type
180        if ($fichier_cache = cache_nommer($plugin, $conteneur, $configuration)) {
181                // Vérifier l'existence du fichier.
182                if (!file_exists($fichier_cache)) {
183                        $fichier_cache = '';
184                }
185        } else {
186                $fichier_cache = '';
187        }
188
189        return $fichier_cache;
190}
191
192
193/**
194 * Supprime le cache spécifié d'un plugin donné.
195 *
196 * @api
197 *
198 * @param string $plugin
199 *        Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
200 *        ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
201 * @param string $nom_cache
202 *        Nom et extension du fichier cache.
203 *
204 * @return void
205 */
206function cache_vider($plugin, $caches = array()) {
207
208        // Détermination du nom du cache en fonction du plugin appelant et du type
209        $fichier_cache = '';
210
211        // Suppression du fichier cache
212        include_spip('inc/flock');
213        supprimer_fichier($fichier_cache);
214}
Note: See TracBrowser for help on using the repository browser.