用户
 找回密码
 入住 CI 中国社区
搜索
查看: 5303|回复: 10
收起左侧

[已解决] 我怎么尽遇到怪问题啊。。。

[复制链接]
发表于 2012-1-28 21:59:06 | 显示全部楼层 |阅读模式
我用CI自带的缓存要出错啊,是按照手册来的啊

$this->load->driver('cache',array('adapter'=>'apc','backup'=>'file'));
if ( ! $foo = $this->cache->get('foo')){
    echo 'Saving to the cache!<br />';
    $foo = 'foobarbaz!';
    // Save into the cache for 5 minutes
    $this->cache->save('foo', $foo, 300);
}
echo $foo;

运行这段代码后:
Fatal error: Call to undefined function apc_fetch() in E:\wamp\www\myci\system\libraries\Cache\drivers\Cache_apc.php on line 41

这可咋整啊。。。。
发表于 2012-1-28 22:13:56 | 显示全部楼层
你要先安装 apc 扩展。。。
CI 只是一个 APC 扩展的封装而已。
要了解什么是 APC 请 google php apc
发表于 2012-1-28 22:14:49 | 显示全部楼层
因为你不仔细看手册。
缓存那节一开始就有如下的话:
CodeIgniter提供了多种目前业界流行的快速动态缓存组件的封装类。除了基于纯文本的缓存(文件缓存)外,其他缓存组件均需对服务器环境进行正确配置才能使用,否则程序会抛出致命异常(Fatal Exception)错误。
发表于 2012-1-28 22:33:30 | 显示全部楼层
看着英文完全可以理解这是什么意思了。
 楼主| 发表于 2012-1-28 22:48:22 | 显示全部楼层
哦 原来是这样啊。。。。多谢各位了。。。
发表于 2012-2-18 11:53:54 | 显示全部楼层
jeongee 发表于 2012-1-28 22:14
因为你不仔细看手册。
缓存那节一开始就有如下的话:

首先加载缓存适配器,然后指定 APC 作为适配器优先使用的缓存实现,同时,我们指定文本缓存作为替代方案。这样,在一些服务器不支持APC的情况下(如国内的虚拟主机),我们可以使用替代方案保证程序正常运行。  那这个怎么理解啊  我也是这么写的   也是同样的错误
发表于 2012-2-18 11:55:09 | 显示全部楼层
jeongee 发表于 2012-1-28 22:14
因为你不仔细看手册。
缓存那节一开始就有如下的话:

我确定我的php没配置过apc   但是这个
首先加载缓存适配器,然后指定 APC 作为适配器优先使用的缓存实现,同时,我们指定文本缓存作为替代方案。这样,在一些服务器不支持APC的情况下(如国内的虚拟主机),我们可以使用替代方案保证程序正常运行。

不应该理解为   如果使用这种方式  如果不支持apc 那么系统会选择 文件缓存      ??????????????
发表于 2012-2-19 12:56:56 | 显示全部楼层
☆淡定★ 发表于 2012-2-18 11:55
我确定我的php没配置过apc   但是这个
首先加载缓存适配器,然后指定 APC 作为适配器优先使用的缓存实现 ...

你理解错了,呵呵。
这里的意思是如果你的服务器不支持 APC,请选择文件缓存,文件缓存需要你设置,不是自动的。
具体请看手册。
例如这就是使用文件缓存:
PHP复制代码
$this->load->driver('cache');
$this->cache->file->save('foo', 'bar', 10);
复制代码

请仔细理解什么是“适配器”
发表于 2012-2-19 20:22:32 | 显示全部楼层
Hex 发表于 2012-2-19 12:56
你理解错了,呵呵。
这里的意思是如果你的服务器不支持 APC,请选择文件缓存,文件缓存需要你设置,不是自 ...

嗯嗯 好的 谢谢啊
发表于 2012-7-16 19:40:31 | 显示全部楼层
Hex 发表于 2012-2-19 12:56
你理解错了,呵呵。
这里的意思是如果你的服务器不支持 APC,请选择文件缓存,文件缓存需要你设置,不是自 ...

说的不对吧?
我看了他说是GET方法的时候,会调用__get方法,这个方法就是检查是否支持第一个缓存的,不支持的话就调用第2个缓存,但是我发现根本不会调用,BUG吧?
解决方法是在 Cache这个类里的_init****  这个函数的底部调用 is_support这个函数。
传入的参数就是上面的那个 $this->{$param}
已经解决了。

本版积分规则