1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
<?php
namespace Securimage\StorageAdapter;
use Securimage\StorageAdapter\AdapterInterface;
class Memcached implements AdapterInterface { protected $memcached_servers; protected $persistent; protected $expiration;
protected $memcached;
public function __construct($options = null) { if (!class_exists('Memcached')) { throw new \Exception("Memcached extension is not enabled. Securimage Memcached adapter cannot function"); }
if (!is_array($options)) { throw new \Exception("Options supplied to Securimage Memcached adapter must be an array"); }
if (!isset($options['memcached_servers'])) { throw new \Exception("'memcached_servers' option was supplied to StorageAdapter\Memcached::__construct"); }
if (!is_array($options['memcached_servers'])) { throw new \Exception("'memcached_servers' option must be an array of servers"); }
$this->memcached_servers = $options['memcached_servers']; $this->persistent = @$options['memcached_persistent']; $this->expiration = ((int)$options['expiration'] > 0) ? (int)$options['expiration'] : 900;
$this->bootstrap(); }
public function store($captchaId, $captchaInfo) { return $this->memcached->set($this->getKey($captchaId), $captchaInfo, $this->expiration); }
public function storeAudioData($captchaId, $audioData) { $info = $this->get($captchaId);
if ($info && $this->delete($captchaId)) { $info->captchaAudioData = $audioData;
return $this->store($captchaId, $audioData); }
return false; }
public function get($captchaId, $what = null) { $result = $this->memcached->get($this->getKey($captchaId));
if (!$result) { if ($this->memcached->getResultCode() != \Memcached::RES_NOTFOUND) { trigger_error( sprintf("Securimage Memcached::get failed with error %d: %s", $this->memcached->getResultCode(), $this->memcached->getResultMessage() ), E_USER_WARNING ); } } else { return $result; }
return null; }
public function delete($captchaId) { return $this->memcached->delete($this->getKey($captchaId)); }
protected function bootstrap() { $this->memcached = new \Memcached($this->persistent);
foreach($this->memcached_servers as $server) { $parts = explode(':', $server); $host = $parts[0]; $port = (isset($parts[1]) ? $parts[1] : 11211);
$this->memcached->addServer($host, $port); } }
protected function getKey($captchaId) { return 'securimage:' . $captchaId; } }
|