Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 必须加载memcache扩展才能使用此后端_Php_Zend Framework_Memcached - Fatal编程技术网

Php 必须加载memcache扩展才能使用此后端

Php 必须加载memcache扩展才能使用此后端,php,zend-framework,memcached,Php,Zend Framework,Memcached,我安装了memcached。这是phpinfo()中的: 但这样使用时: private static function getZendCacheMemcachedObject() { $frontendOpts = array( 'caching' => true, 'lifetime' => 3600, 'automatic_serialization' => true ); $backendOpt

我安装了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

有什么想法吗?

PHP有两个名称混乱的Memcached库:

  • (请注意d)

您的代码需要第一个。只需执行一个简单的
pecl卸载memcached
,然后
pecl安装memcache
,修改您的
php.ini
,以包含适当的。因此,它应该可以工作。

对于已安装的php库,看起来最简单的解决方案是使用不同的后端-如果您的zend framework版本允许:

Zend_Cache_Backend_Libmemcached()

我想 返回Zend_Cache::factory('Core','Memcached',$frontendots,$backendots); 变成
返回Zend_Cache::factory('Core','Libmemcached',$frontendits,$backendits)

我解决这个问题很简单。发生此问题的原因是您没有安装php memcached扩展。让我们在Ubuntu中通过这个命令安装它

sudo apt-get install php-memcached

或者在其他操作系统中,您可以确定自己需要名为php memcached的扩展 可能的解决方案: (请注意,扩展与库不同,有名为
memcache
memchached
的库,还有名为
php memcached
的扩展。在我的例子中,需要最后一个) (在linux上)

  • 要安装扩展名:
    sudo apt get install php memcached

    这对你有帮助
如果还需要库,请遵循下面的说明

  • 要安装库本身:
    sudo apt get install memcached
  • 还有一个包含memcached的库:
    sudo-apt-get-install-libmemcached-tools

如果
extension\u loaded('memcache')
返回false,那么要阅读更多内容并对其进行配置,您可能需要检查并

FYI ZF输出该错误,因此您的配置出现了一些奇怪的情况。问题似乎是Zend\u Cache\u Backend\u Memcached正在加载memcache库而不是Memcached。为什么它在使用memcache时被称为mecached?这可能会有帮助:-看看我的phpinfo,我安装的肯定是“memcache”,而你的是“memcached”,这些名字一直让我困惑。我永远不知道我是在处理Memcache、Memcached还是Libmemcached:如果您给出完整的说明,P就太好了。我们在php.ini中添加了什么?E:在基于Ubuntu的操作系统上找不到php memcachedSimplier解决方案包。不要忘记在
$sudo/etc/init.d/apache2重新启动后重新启动服务器