Laravel项目使用Memcached报错:Class 'Memcached' not found 求助
问题根源
你遇到的核心问题是Laravel的Memcached缓存驱动依赖的是php-memcached扩展(带d的版本),而你当前在php.ini中启用的是memcache.dll(不带d的旧版扩展)。这两个是完全不同的PHP扩展,API设计也不一样,所以Laravel找不到它需要的Memcached类。
你的原生测试代码用的是Memcache类(不带d),所以能正常运行,但Laravel的memcached驱动是基于Memcached类(带d)开发的,两者并不兼容。
解决方案(Windows环境)
按照以下步骤操作即可解决:
下载对应版本的php_memcached.dll
要严格匹配你的PHP版本(比如7.4、8.1)、线程安全属性(TS/NTS)以及系统架构(x86/x64)。你可以从PECL的memcached扩展页面获取对应版本的dll文件。放置扩展文件
将下载好的php_memcached.dll复制到XAMPP安装目录下的php/ext文件夹中。修改php.ini配置
打开XAMPP的php.ini文件,找到你之前添加的extension=memcache.dll,将其替换为:extension=php_memcached.dll如果需要同时保留旧版
memcache扩展,也可以直接新增这一行,Laravel会自动优先使用带d的版本。重启Apache服务器
在XAMPP控制面板中重启Apache服务,确保新的扩展被正确加载。验证扩展是否加载成功
创建一个phpinfo.php文件,内容如下:<?php phpinfo(); ?>访问这个文件后搜索"memcached",如果能看到对应的扩展信息,说明加载成功。
重新测试Laravel代码
现在再运行你的Laravel代码:public function index(){ Cache::store('memcached')->put('bar', 'baz', 10); }应该就不会再出现"Class 'Memcached' not found"的错误了。
额外注意事项
- 如果你的Memcached服务器配置了用户名和密码,记得在
cache.php中取消sasl配置的注释,并在.env文件中设置MEMCACHED_USERNAME和MEMCACHED_PASSWORD。 - 确认
.env文件中的MEMCACHED_HOST和MEMCACHED_PORT与你的Memcached服务器配置一致(默认localhost和11211没问题)。
内容的提问来源于stack exchange,提问作者Anil Kumar Sahu

