Yii2基础模板配置缓存组件遇ApcCache/MemCache报错,PHP7.1.11如何解决?
解决Yii2缓存组件配置错误的方案
先帮你拆解两个核心问题:为什么用ApcCache报错,以及切换MemCache没生效的原因,一步步来解决:
一、ApcCache报错的解决(PHP7.1环境)
PHP7.0之后,老的APC扩展已经被APCU扩展取代了,你虽然配置了useApcu => true,但大概率是没装APCU扩展才触发报错,解决步骤如下:
- 先检查APCU是否安装:
- 新建一个php文件,写入
<?php phpinfo(); ?>,访问后搜索“apcu”,如果没有相关模块说明未安装; - 或者在命令行执行
php -m | grep apcu,没有输出就是未安装状态。
- 新建一个php文件,写入
- 安装APCU扩展:
- 如果你是Ubuntu/Debian系统,执行
sudo apt-get install php7.1-apcu(注意对应你的PHP版本); - CentOS/RHEL系统执行
sudo yum install php71u-pecl-apcu; - 也可以用PECL安装:
pecl install apcu,安装完成后在php.ini里添加extension=apcu.so,然后重启Apache/Nginx或者php-fpm服务。
- 如果你是Ubuntu/Debian系统,执行
- 安装完成后,你的ApcCache配置就能正常工作了,保持现有配置里的
useApcu => true即可。
二、切换MemCache没生效的原因
你看你的配置代码,'class' => 'yii\caching\MemCache'是被注释掉的!实际生效的还是ApcCache,所以报错完全一样。正确的MemCache配置应该改成这样:
'cache' => [ // 注释掉ApcCache的配置项 // 'class' => 'yii\caching\ApcCache', // 'useApcu' => true, 'class' => 'yii\caching\MemCache', 'keyPrefix' => 'myapp', // 可选:如果服务器装的是memcached扩展,开启下面这行 // 'useMemcached' => true, ]
另外,使用MemCache还需要满足两个前提:
- 服务器上安装了Memcached服务(比如Ubuntu执行
sudo apt-get install memcached); - PHP安装了对应的扩展:要么是
memcache扩展,要么是memcached扩展(根据你开启的useMemcached选项对应安装)。
三、开发环境备选方案:FileCache
如果不想折腾扩展,开发环境可以直接用文件缓存,配置简单,不需要额外安装任何扩展:
'cache' => [ 'class' => 'yii\caching\FileCache', 'keyPrefix' => 'myapp', ]
内容的提问来源于stack exchange,提问作者yasir shah
相关产品推荐
相关产品推荐

