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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
<?php
namespace Securimage\StorageAdapter;
use Securimage\StorageAdapter\AdapterInterface;
class Redis implements AdapterInterface { protected $server; protected $persistent; protected $dbindex; protected $expiration;
protected $redis;
public function __construct($options = null) { if (!class_exists('Redis')) { throw new \Exception("Redis extension is not enabled. Securimage Redis adapter cannot function"); }
if (!is_array($options)) { throw new \Exception("Options supplied to Securimage Redis adapter must be an array"); }
if (!isset($options['redis_server'])) { throw new \Exception("'redis_server' option was supplied to StorageAdapter\Redis::__construct"); }
if (!is_string($options['redis_server'])) { throw new \Exception("'redis_server' option must be a string"); }
$this->server = $options['redis_server']; $this->persistent = @$options['redis_persistent']; $this->expiration = ((int)$options['expiration'] > 0) ? (int)$options['expiration'] : 900; $this->dbindex = (isset($options['redis_dbindex'])) ? $options['redis_dbindex'] : null;
$this->bootstrap(); }
public function store($captchaId, $captchaInfo) { $hash = array(); foreach($captchaInfo as $prop => $val) { // convert CaptchaObject to array $hash[$prop] = $val; }
if ($this->redis->hMSet($captchaId, $hash)) { $this->redis->setTimeout($captchaId, $this->expiration); return true; } else { return false; } }
public function storeAudioData($captchaId, $audioData) { return $this->redis->hSet($captchaId, 'captchaAudioData', $audioData) !== false; }
public function get($captchaId, $what = null) { $result = null;
if (is_null($what)) { $result = $this->redis->hGetAll($captchaId); } else { if (is_string($what)) $what = array($what); if (!is_array($what)) { trigger_error( "'what' parameter passed to StorageAdapter\Redis::get was neither an array nor string", E_USER_WARNING ); return false; }
$result = $this->redis->hMget($captchaId, $what); }
if ($result) { $info = new \Securimage\CaptchaObject; foreach($result as $key => $val) { $info->$key = $val; }
return $info; }
return null; }
public function delete($captchaId) { return $this->redis->del($captchaId) > 0; }
protected function bootstrap() { $this->redis = new \Redis();
$connect = 'connect';
if ($this->persistent) { $connect = 'pconnect'; }
$server = $this->server; $parts = explode(':', $server, 2); $server = $parts[0]; $port = (isset($parts[1]) ? $parts[1] : null);
if ($this->redis->$connect($server, $port)) { $this->redis->setOption(\Redis::OPT_PREFIX, 'securimage:'); if ($this->dbindex) { $this->redis->select($this->dbindex); } } }
protected function getKey($captchaId) { return 'securimage:' . $captchaId; } }
|