sql-injection fix in demographics
[openemr.git] / library / adodb / adodb-memcache.lib.inc.php
blob37b81d4751766790add50f81fb43066b97fe3280
1 <?php
3 // security - hide paths
4 if (!defined('ADODB_DIR')) die();
6 global $ADODB_INCLUDED_MEMCACHE;
7 $ADODB_INCLUDED_MEMCACHE = 1;
9 global $ADODB_INCLUDED_CSV;
10 if (empty($ADODB_INCLUDED_CSV)) include(ADODB_DIR.'/adodb-csvlib.inc.php');
12 /*
14 V5.14 8 Sept 2011 (c) 2000-2011 John Lim (jlim#natsoft.com). All rights reserved.
15 Released under both BSD license and Lesser GPL library license.
16 Whenever there is any discrepancy between the two licenses,
17 the BSD license will take precedence. See License.txt.
18 Set tabs to 4 for best viewing.
20 Latest version is available at http://adodb.sourceforge.net
22 Usage:
24 $db = NewADOConnection($driver);
25 $db->memCache = true; /// should we use memCache instead of caching in files
26 $db->memCacheHost = array($ip1, $ip2, $ip3);
27 $db->memCachePort = 11211; /// this is default memCache port
28 $db->memCacheCompress = false; /// Use 'true' to store the item compressed (uses zlib)
30 $db->Connect(...);
31 $db->CacheExecute($sql);
33 Note the memcache class is shared by all connections, is created during the first call to Connect/PConnect.
35 Class instance is stored in $ADODB_CACHE
38 class ADODB_Cache_MemCache {
39 var $createdir = false; // create caching directory structure?
41 //-----------------------------
42 // memcache specific variables
44 var $hosts; // array of hosts
45 var $port = 11211;
46 var $compress = false; // memcache compression with zlib
48 var $_connected = false;
49 var $_memcache = false;
51 function ADODB_Cache_MemCache(&$obj)
53 $this->hosts = $obj->memCacheHost;
54 $this->port = $obj->memCachePort;
55 $this->compress = $obj->memCacheCompress;
58 // implement as lazy connection. The connection only occurs on CacheExecute call
59 function connect(&$err)
61 if (!function_exists('memcache_pconnect')) {
62 $err = 'Memcache module PECL extension not found!';
63 return false;
66 $memcache = new MemCache;
68 if (!is_array($this->hosts)) $this->hosts = array($this->hosts);
70 $failcnt = 0;
71 foreach($this->hosts as $host) {
72 if (!@$memcache->addServer($host,$this->port,true)) {
73 $failcnt += 1;
76 if ($failcnt == sizeof($this->hosts)) {
77 $err = 'Can\'t connect to any memcache server';
78 return false;
80 $this->_connected = true;
81 $this->_memcache = $memcache;
82 return true;
85 // returns true or false. true if successful save
86 function writecache($filename, $contents, $debug, $secs2cache)
88 if (!$this->_connected) {
89 $err = '';
90 if (!$this->connect($err) && $debug) ADOConnection::outp($err);
92 if (!$this->_memcache) return false;
94 if (!$this->_memcache->set($filename, $contents, $this->compress ? MEMCACHE_COMPRESSED : 0, $secs2cache)) {
95 if ($debug) ADOConnection::outp(" Failed to save data at the memcached server!<br>\n");
96 return false;
99 return true;
102 // returns a recordset
103 function readcache($filename, &$err, $secs2cache, $rsClass)
105 $false = false;
106 if (!$this->_connected) $this->connect($err);
107 if (!$this->_memcache) return $false;
109 $rs = $this->_memcache->get($filename);
110 if (!$rs) {
111 $err = 'Item with such key doesn\'t exists on the memcached server.';
112 return $false;
115 // hack, should actually use _csv2rs
116 $rs = explode("\n", $rs);
117 unset($rs[0]);
118 $rs = join("\n", $rs);
119 $rs = unserialize($rs);
120 if (! is_object($rs)) {
121 $err = 'Unable to unserialize $rs';
122 return $false;
124 if ($rs->timeCreated == 0) return $rs; // apparently have been reports that timeCreated was set to 0 somewhere
126 $tdiff = intval($rs->timeCreated+$secs2cache - time());
127 if ($tdiff <= 2) {
128 switch($tdiff) {
129 case 2:
130 if ((rand() & 15) == 0) {
131 $err = "Timeout 2";
132 return $false;
134 break;
135 case 1:
136 if ((rand() & 3) == 0) {
137 $err = "Timeout 1";
138 return $false;
140 break;
141 default:
142 $err = "Timeout 0";
143 return $false;
146 return $rs;
149 function flushall($debug=false)
151 if (!$this->_connected) {
152 $err = '';
153 if (!$this->connect($err) && $debug) ADOConnection::outp($err);
155 if (!$this->_memcache) return false;
157 $del = $this->_memcache->flush();
159 if ($debug)
160 if (!$del) ADOConnection::outp("flushall: failed!<br>\n");
161 else ADOConnection::outp("flushall: succeeded!<br>\n");
163 return $del;
166 function flushcache($filename, $debug=false)
168 if (!$this->_connected) {
169 $err = '';
170 if (!$this->connect($err) && $debug) ADOConnection::outp($err);
172 if (!$this->_memcache) return false;
174 $del = $this->_memcache->delete($filename);
176 if ($debug)
177 if (!$del) ADOConnection::outp("flushcache: $key entry doesn't exist on memcached server!<br>\n");
178 else ADOConnection::outp("flushcache: $key entry flushed from memcached server!<br>\n");
180 return $del;
183 // not used for memcache
184 function createdir($dir, $hash)
186 return true;