1
|
|
|
<?php |
2
|
|
|
/** |
3
|
|
|
* Classe en rapport avec Memcache |
4
|
|
|
* |
5
|
|
|
* @author Vermeulen Maxime <[email protected]> |
6
|
|
|
* @version 1.0 |
7
|
|
|
*/ |
8
|
|
|
|
9
|
|
|
namespace BFW; |
10
|
|
|
|
11
|
|
|
use \Exception; |
12
|
|
|
|
13
|
|
|
/** |
14
|
|
|
* Gestion du serveur avec memcache |
15
|
|
|
* @package bfw |
16
|
|
|
*/ |
17
|
|
|
class Ram implements \BFWInterface\IRam |
18
|
|
|
{ |
19
|
|
|
/** |
20
|
|
|
* @var $_kernel L'instance du Kernel |
21
|
|
|
*/ |
22
|
|
|
protected $_kernel; |
23
|
|
|
|
24
|
|
|
/** |
25
|
|
|
* @var $server_connect Permet de savoir si on est connecté au serveur. |
26
|
|
|
*/ |
27
|
|
|
protected $server_connect = false; |
28
|
|
|
|
29
|
|
|
/** |
30
|
|
|
* @var $Server Le serveur |
31
|
|
|
*/ |
32
|
|
|
protected $Server; |
33
|
|
|
|
34
|
|
|
/** |
35
|
|
|
* @var $debug Permet d'activer ou non le mode débug |
36
|
|
|
*/ |
37
|
|
|
public $debug = false; |
38
|
|
|
|
39
|
|
|
|
40
|
|
|
/** |
41
|
|
|
* Constructeur |
42
|
|
|
* Se connecte au serveur memcache indiqué |
43
|
|
|
* |
44
|
|
|
* @param string $host l'host du serveur memcache |
45
|
|
|
* @param integer $port le port du serveur memcache |
46
|
|
|
* |
47
|
|
|
* @throws Exception : Si l'extension php-memcache n'est présente |
48
|
|
|
* Si les infos sont pas au bon format |
49
|
|
|
* Si la connexion échoue |
50
|
|
|
*/ |
51
|
|
|
public function __construct($host, $port) |
52
|
|
|
{ |
53
|
|
|
$this->_kernel = getKernel(); |
54
|
|
|
|
55
|
|
|
//Vérification si l'extension memcache est bien loadé |
56
|
|
|
if(!extension_loaded('memcache')) |
57
|
|
|
{ |
58
|
|
|
throw new Exception('Memcache php extension is not loaded.'); |
59
|
|
|
} |
60
|
|
|
|
61
|
|
|
//Vérifie que les infos sont bien au bon typage |
62
|
|
|
if(!(is_string($host) && is_integer($port))) |
63
|
|
|
{ |
64
|
|
|
throw new Exception('Memcache connexion informations format is not correct.'); |
65
|
|
|
} |
66
|
|
|
|
67
|
|
|
$this->Server = new \Memcache; |
68
|
|
|
|
69
|
|
|
//Se connexion ... exception si fail |
70
|
|
|
if($this->Server->connect($host, $port) === false) |
71
|
|
|
{ |
72
|
|
|
throw new Exception('Memcache connect fail.'); |
73
|
|
|
} |
74
|
|
|
|
75
|
|
|
$this->server_connect = true; |
76
|
|
|
} |
77
|
|
|
|
78
|
|
|
/** |
79
|
|
|
* Permet de stocker une clé en mémoire ou de la mettre à jour |
80
|
|
|
* |
81
|
|
|
* @param string $key Clé correspondant à la valeur |
82
|
|
|
* @param mixed $data Les nouvelles données. Il n'est pas possible de stocker une valeur de type resource. |
83
|
|
|
* @param int $expire (default: 0) Le temps en seconde avant expiration. 0 illimité, max 30jours |
84
|
|
|
* |
85
|
|
|
* @throws \Exception Erreur dsans les paramètres donnée à la méthode |
86
|
|
|
* |
87
|
|
|
* @return bool |
88
|
|
|
*/ |
89
|
|
|
public function setVal($key, $data, $expire=0) |
90
|
|
|
{ |
91
|
|
|
$verifParams = verifTypeData(array( |
92
|
|
|
array('type' => 'string', 'data' => $key), |
93
|
|
|
array('type' => 'int', 'data' => $expire) |
94
|
|
|
)); |
95
|
|
|
|
96
|
|
|
if(!$verifParams || gettype($data) == 'resource') |
97
|
|
|
{ |
98
|
|
|
throw new \Exception('Erreur dans les paramètres de Ram->setVal()'); |
99
|
|
|
} |
100
|
|
|
|
101
|
|
|
$valDataServer = $this->Server->get($key); |
102
|
|
|
if($valDataServer !== false) |
103
|
|
|
{ |
104
|
|
|
return $this->Server->replace($key, $data, 0, $expire); |
105
|
|
|
} |
106
|
|
|
|
107
|
|
|
return $this->Server->set($key, $data, 0, $expire); |
108
|
|
|
} |
109
|
|
|
|
110
|
|
|
/** |
111
|
|
|
* On modifie le temps avant expiration des infos sur le serveur memcached pour une clé choisie. |
112
|
|
|
* |
113
|
|
|
* @param string $key la clé disignant les infos concerné |
114
|
|
|
* @param int $exp le nouveau temps avant expiration (0: pas d'expiration, max 30jours) |
115
|
|
|
* |
116
|
|
|
* @throws \Exception Erreur dsans les paramètres donnée à la méthode |
117
|
|
|
* |
118
|
|
|
* @return boolean|null |
119
|
|
|
*/ |
120
|
|
|
public function majExpire($key, $exp) |
121
|
|
|
{ |
122
|
|
|
$verifParams = verifTypeData(array( |
123
|
|
|
array('type' => 'string', 'data' => $key), |
124
|
|
|
array('type' => 'int', 'data' => $exp) |
125
|
|
|
)); |
126
|
|
|
|
127
|
|
|
if(!$verifParams) |
128
|
|
|
{ |
129
|
|
|
throw new \Exception('Erreur dans les paramètres de Ram->majExpire()'); |
130
|
|
|
} |
131
|
|
|
|
132
|
|
|
$ret = $this->Server->get($key); //Récupère la valeur |
133
|
|
|
|
134
|
|
|
//On la "modifie" en remettant la même valeur mais en changeant le temps |
135
|
|
|
//avant expiration si une valeur a été retournée |
136
|
|
|
if($ret !== false && $this->Server->replace($key, $ret, 0, $exp)) |
137
|
|
|
{ |
138
|
|
|
return true; |
139
|
|
|
} |
140
|
|
|
|
141
|
|
|
return false; |
142
|
|
|
} |
143
|
|
|
|
144
|
|
|
/** |
145
|
|
|
* Permet de savoir si la clé existe |
146
|
|
|
* |
147
|
|
|
* @param string $key la clé disignant les infos concernées |
148
|
|
|
* |
149
|
|
|
* @throws \Exception Erreur dsans les paramètres donnée à la méthode |
150
|
|
|
* |
151
|
|
|
* @return bool |
152
|
|
|
*/ |
153
|
|
View Code Duplication |
public function ifExists($key) |
|
|
|
|
154
|
|
|
{ |
155
|
|
|
$verifParams = verifTypeData(array(array('type' => 'string', 'data' => $key))); |
156
|
|
|
|
157
|
|
|
if(!$verifParams) |
158
|
|
|
{ |
159
|
|
|
throw new \Exception('Erreur dans les paramètres de Ram->ifExists()'); |
160
|
|
|
} |
161
|
|
|
|
162
|
|
|
$ret = $this->Server->get($key); //Récupère la valeur |
163
|
|
|
|
164
|
|
|
if($ret === false) {return false;} |
165
|
|
|
return true; |
166
|
|
|
} |
167
|
|
|
|
168
|
|
|
/** |
169
|
|
|
* Supprime une clé |
170
|
|
|
* |
171
|
|
|
* @param string $key la clé disignant les infos concernées |
172
|
|
|
* |
173
|
|
|
* @return bool |
174
|
|
|
*/ |
175
|
|
View Code Duplication |
public function delete($key) |
|
|
|
|
176
|
|
|
{ |
177
|
|
|
$verifParams = verifTypeData(array(array('type' => 'string', 'data' => $key))); |
178
|
|
|
|
179
|
|
|
if(!$verifParams) |
180
|
|
|
{ |
181
|
|
|
throw new \Exception('Erreur dans les paramètres de Ram->delete()'); |
182
|
|
|
} |
183
|
|
|
|
184
|
|
|
if($this->Server->delete($key)) {return true;} |
185
|
|
|
return false; |
186
|
|
|
} |
187
|
|
|
|
188
|
|
|
/** |
189
|
|
|
* Permet de retourner la valeur d'une clé. |
190
|
|
|
* |
191
|
|
|
* @param string $key Clé correspondant à la valeur |
192
|
|
|
* |
193
|
|
|
* @throws \Exception Erreur dsans les paramètres donnée à la méthode |
194
|
|
|
* |
195
|
|
|
* @return mixed La valeur demandée |
196
|
|
|
*/ |
197
|
|
|
public function getVal($key) |
198
|
|
|
{ |
199
|
|
|
$verifParams = verifTypeData(array(array('type' => 'string', 'data' => $key))); |
200
|
|
|
|
201
|
|
|
if(!$verifParams) |
202
|
|
|
{ |
203
|
|
|
throw new \Exception('Erreur dans les paramètres de Ram->getVal()'); |
204
|
|
|
} |
205
|
|
|
|
206
|
|
|
return $this->Server->get($key); |
207
|
|
|
} |
208
|
|
|
} |
209
|
|
|
|
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.