我安装了memcached。这是来自phpinfo():
但是当它像这样使用时:
private static function getZendCacheMemcachedObject()
{
$frontendOpts = array(
'caching' => true,
'lifetime' => 3600,
'automatic_serialization' => true
);
$backendOpts = array(
'servers' =>array(
array(
'host' => 'localhost',
'port' => 11211,
'weight' => 1
)
),
'compression' => false
);
return Zend_Cache::factory('Core', 'Memcached', $frontendOpts, $backendOpts);
}
public function foo($id)
{
$cache = self::getZendCacheMemcachedObject();
$cacheKey = 'foo_'.$id;
$xml = $cache->load($cacheKey);
if (false === $xml) {
$xml = $this->httpClient->foo();
$cache->save($xml, $cacheKey);
}
return $xml;
}
我收到此错误:
The memcache extension must be loaded for using this backend
有什么想法吗?
答案 0 :(得分:39)
PHP有两个Memcached库,名称令人困惑:
您的代码需要第一个代码。只需执行一个简单的pecl uninstall memcached
然后pecl install memcache
,修改您的php.ini
即可包含适当的.so,它应该有效。
答案 1 :(得分:2)
对于您已安装的PHP库,看起来最简单的解决方案是使用不同的后端 - 如果您的zend框架版本允许它:
Zend_Cache_Backend_Libmemcached(http://doczf.mikaelkael.fr/1.11/en/zend.cache.backends.html)
我猜想 返回Zend_Cache :: factory('Core','Memcached',$ frontendOpts,$ backendOpts); 变成 返回Zend_Cache :: factory('Core','Libmemcached',$ frontendOpts,$ backendOpts);答案 2 :(得分:2)
需要扩展名为php-memcached
可能的解决方案:
(请注意,扩展名不同于库,有名为memcache
和memchached
的库,还有名为php-memcached
的扩展名。在我的情况下,需要最后一个)
(在Linux上)
sudo apt-get install php-memcached
如果还需要库,请遵循以下内容。
sudo apt-get install memcached
sudo apt-get install libmemcached-tools
答案 3 :(得分:1)
sudo apt-get install php-memcached
或者在其他操作系统中,您可以自己搞清楚