Issues (3083)

htdocs/class/cache/memcache.php (1 issue)

Labels
Severity
1
<?php
2
/**
3
 * Cache engine For XOOPS
4
 *
5
 * You may not change or alter any portion of this comment or credits
6
 * of supporting developers from this source code or any supporting source code
7
 * which is considered copyrighted (c) material of the original comment or credit authors.
8
 * This program is distributed in the hope that it will be useful,
9
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11
 *
12
 * @copyright       (c) 2000-2016 XOOPS Project (www.xoops.org)
13
 * @license             GNU GPL 2 (https://www.gnu.org/licenses/gpl-2.0.html)
14
 * @package             class
15
 * @subpackage          cache
16
 * @since               2.3.0
17
 * @author              Taiwen Jiang <[email protected]>
18
 */
19
defined('XOOPS_ROOT_PATH') || exit('Restricted access');
20
21
/**
22
 * Memcache storage engine for cache
23
 *
24
 *
25
 * PHP versions 4 and 5
26
 *
27
 * CakePHP(tm) :  Rapid Development Framework <https://www.cakephp.org/>
28
 * Copyright 2005-2008, Cake Software Foundation, Inc.
29
 *                                 1785 E. Sahara Avenue, Suite 490-204
30
 *                                 Las Vegas, Nevada 89104
31
 *
32
 * Licensed under The MIT License
33
 * Redistributions of files must retain the above copyright notice.
34
 *
35
 * @filesource
36
 * @copyright  Copyright 2005-2008, Cake Software Foundation, Inc.
37
 * @link       https://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project
38
 * @package    cake
39
 * @subpackage cake.cake.libs.cache
40
 * @since      CakePHP(tm) v 1.2.0.4933
41
 * @modifiedby $LastChangedBy$
42
 * @lastmodified $Date$
43
 * @license    https://www.opensource.org/licenses/mit-license.php The MIT License
44
 */
45
46
/**
47
 * Memcache storage engine for cache
48
 *
49
 * @package    cake
50
 * @subpackage cake.cake.libs.cache
51
 */
52
class XoopsCacheMemcache extends XoopsCacheEngine
53
{
54
    /**
55
     * Memcache wrapper.
56
     *
57
     * @var object
58
     * @access private
59
     */
60
    private $memcache;
61
62
    /**
63
     * settings
64
     *          servers = string or array of memcache servers, default => 127.0.0.1
65
     *          compress = boolean, default => false
66
     *
67
     * @var array
68
     * @access public
69
     */
70
    public $settings = array();
71
72
    /**
73
     * Initialize the Cache Engine
74
     *
75
     * Called automatically by the cache frontend
76
     * To reinitialize the settings call Cache::engine('EngineName', [optional] settings = array());
77
     *
78
     * @param array $settings array of setting for the engine
79
     *
80
     * @return boolean True if the engine has been successfully initialized, false if not
81
     * @access   public
82
     */
83
    public function init($settings = array())
84
    {
85
        if (!class_exists('Memcache')) {
86
            return false;
87
        }
88
        parent::init($settings);
89
        $defaults       = array(
90
            'servers'  => array(
91
                '127.0.0.1'),
92
            'compress' => false);
93
        $this->settings = array_merge($defaults, $this->settings);
94
95
        if (!$this->settings['compress']) {
96
            $this->settings['compress'] = MEMCACHE_COMPRESSED;
97
        }
98
        if (!is_array($this->settings['servers'])) {
99
            $this->settings['servers'] = array($this->settings['servers']);
100
        }
101
        $this->memcache = null;
102
        $this->memcache = new Memcache();
103
        foreach ($this->settings['servers'] as $server) {
104
            $parts = explode(':', $server);
105
            $host  = $parts[0];
106
            $port  = 11211;
107
            if (isset($parts[1])) {
108
                $port = $parts[1];
109
            }
110
            if ($this->memcache->addServer($host, $port)) {
0 ignored issues
show
It seems like $port can also be of type string; however, parameter $port of MemcachePool::addServer() does only seem to accept integer, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

110
            if ($this->memcache->addServer($host, /** @scrutinizer ignore-type */ $port)) {
Loading history...
111
                return true;
112
            }
113
        }
114
115
        return false;
116
    }
117
118
    /**
119
     * Write data for key into cache
120
     *
121
     * @param  string  $key      Identifier for the data
122
     * @param  mixed   $value    Data to be cached
123
     * @param  integer $duration How long to cache the data, in seconds
124
     * @return boolean True if the data was successfully cached, false on failure
125
     * @access public
126
     */
127
    public function write($key, $value, $duration = null)
128
    {
129
        return $this->memcache->set($key, $value, $this->settings['compress'], $duration);
130
    }
131
132
    /**
133
     * Read a key from the cache
134
     *
135
     * @param  string $key Identifier for the data
136
     * @return mixed  The cached data, or false if the data doesn't exist, has expired, or if there was an error fetching it
137
     * @access public
138
     */
139
    public function read($key)
140
    {
141
        return $this->memcache->get($key);
142
    }
143
144
    /**
145
     * Delete a key from the cache
146
     *
147
     * @param  string $key Identifier for the data
148
     * @return boolean True if the value was successfully deleted, false if it didn't exist or couldn't be removed
149
     * @access public
150
     */
151
    public function delete($key)
152
    {
153
        return $this->memcache->delete($key);
154
    }
155
156
    /**
157
     * Delete all keys from the cache
158
     *
159
     * @return boolean True if the cache was successfully cleared, false otherwise
160
     * @access public
161
     */
162
    public function clear($check = null)
163
    {
164
        return $this->memcache->flush();
165
    }
166
167
    /**
168
     * Connects to a server in connection pool
169
     *
170
     * @param  string  $host host ip address or name
171
     * @param  integer $port Server port
172
     * @return boolean True if memcache server was connected
173
     * @access public
174
     */
175
    public function connect($host, $port = 11211)
176
    {
177
        if ($this->memcache->getServerStatus($host, $port) === 0) {
178
            if ($this->memcache->connect($host, $port)) {
179
                return true;
180
            }
181
182
            return false;
183
        }
184
185
        return true;
186
    }
187
}
188