Yii migrate时MemCache扩展未加载错误的排查求助
首先看你遇到的异常信息:
exception 'yii\base\InvalidConfigException' with message 'MemCache requires PHP memcache extension to be loaded.'
in /Applications/AMPPS/www/G2G/vendor/yiisoft/yii2/caching/MemCache.php:220
Stack trace: #0 /Applications/AMPPS/www/G2G/vendor/yiisoft/yii2/caching/MemCache.php(116): yii\caching\MemCache->getMemcache()
你的缓存配置:
'cache' => [ 'class' => 'yii\caching\MemCache', 'servers' => [ [ 'host' => '127.0.0.1', 'port' => 11211, ], ], ],
既然你已经安装了memcached服务并启用了PHP扩展,还是触发这个错误,大概率是扩展类型不匹配或者CLI环境配置的问题,下面是具体的排查方向:
1. 混淆了memcache和memcached两个PHP扩展
Yii2的yii\caching\MemCache类依赖的是memcache扩展(注意名称没有末尾的d),而很多人会误装成memcached扩展(带d的)——这是两个完全独立的PHP扩展,API也有差异。
你可以通过以下命令检查CLI环境下已加载的扩展:
php -m
如果输出里只有memcached而没有memcache,有两种解决方式:
- 换用Yii2中对应memcached扩展的类:把配置里的
class改成yii\caching\MemCached(注意类名带d); - 卸载memcached扩展,安装memcache扩展(根据你的PHP版本选择对应的安装包)。
2. PHP CLI和Web环境的扩展配置不一致
执行yii migrate是通过PHP CLI模式运行的,而你在Web环境中启用的扩展可能没有同步到CLI的php.ini配置里。
你可以通过以下命令查看CLI环境的扩展加载情况:
php -i | grep -i memcache
对比Web页面中phpinfo()的输出,如果CLI里没有加载对应的扩展,需要找到CLI使用的php.ini文件(通过php --ini命令获取路径),添加扩展配置行:
- Linux/Mac:
extension=memcache.so(或extension=memcached.so,取决于你用的扩展) - Windows:
extension=php_memcache.dll(或php_memcached.dll)
修改后重启终端,再执行php -m确认扩展已加载。
3. 缓存配置的类名与实际安装的扩展不匹配
如果你实际安装的是memcached扩展(带d),但配置里用的是yii\caching\MemCache类,就会触发这个错误。此时只需要修改配置中的类名即可:
'cache' => [ 'class' => 'yii\caching\MemCached', // 改为带d的类名 'servers' => [ [ 'host' => '127.0.0.1', 'port' => 11211, ], ], ],
4. Memcached服务未正常运行
虽然你说已经安装了memcached,但也要确认服务是否正在运行。可以通过以下命令检查:
- Mac(用brew安装的):
brew services list查看memcached状态 - Linux:
systemctl status memcached - Windows:在服务列表中查找memcached服务
如果服务未运行,启动它再尝试执行migrate。
内容的提问来源于stack exchange,提问作者Cristal

