Laravel 使用 memcached 缓存时, Composer 报 Class ‘memcached’ Not Found 错误

2022-05-02 18:30:02 +08:00
 freadman
  1. 运行环境

Mac MAMP PRO 6.6.1 Nginx:1.19.2 Mysql:5.7.34 Memcached:1.4.32 PHP:8.1.1

3). 当前系统

  1. 问题描述? 1 、在 PHP 文件中直接测试 memcached 缓存,是可以读取的,代码如下:

$memcached->addServer('127.0.0.1', 11211);

$version = $memcached->getVersion(); echo '

';
print_r($version);
echo '
';

$memcached->set('Key1', 'MAMP PRO'); $result = $memcached->get('Key1'); echo $result; 2. 在命令行执行 php artisan queue:work 正常(之前不行,后面修改环境变量后可以了) 3. 命令行执行 composer dump-autoload 报错

Error

Class "Memcached" not found

at vendor/laravel/framework/src/Illuminate/Cache/MemcachedConnector.php:69 65| * @return \Memcached 66| */ 67| protected function createMemcachedInstance($connectionId) 68| {

69| return empty($connectionId) ? new Memcached : new Memcached($connectionId); 70| } 71| 72| /** 73| * Set the SASL credentials on the Memcached connection.

  +9 vendor frames 

10 [internal]:0 Spatie\Permission\PermissionRegistrar::__construct(Object(Illuminate\Cache\CacheManager))

  +14 vendor frames 

25 [internal]:0 Illuminate\Foundation\Application::Illuminate\Foundation{closure}(Object(Spatie\Permission\PermissionServiceProvider))

2202 次点击
所在节点    PHP
10 条回复
concernedz
2022-05-02 18:52:57 +08:00
配置没弄对?
wonderfulcxm
2022-05-02 18:56:03 +08:00
没开启扩展吧
wonderfulcxm
2022-05-02 18:58:41 +08:00
phpinfo 看看有没有 memcache ,可能加载了不同的 php.ini
documentzhangx66
2022-05-02 21:17:17 +08:00
看看是不是这个问题:

https://stackoverflow.com/questions/34196482/class-memcached-not-found-in-laravel

如果不行,就先使用对比法:

1.先找个能跑得起来的 Demo 环境。

2.对比你自己搭建的环境,出现 not found , 你就跟踪相关进程的每个 IO 操作,用名字作为关键词过滤,肯定会找到一个 not found 的 file io event 。比如,如果是 PHP 进程 在访问 /usr/bin/xxx.mod 时出现 File Not Found ,那么要不就是相关组件你没安装好,要不就是缺失 xxx.mod 组件或文件。

接着再去谷歌找对应的解决方案就行。一般是重装整个系统与环境。或单独安装缺失的模组,或去模组源码版本里寻找这个文件,或者在已经能跑起来的 Demo 环境里找对应的文件,或者对比已经跑起来的 Demo 环境里的 PHP 进程,看看它在访问在访问 /usr/bin/xxx.mod 时,为啥没出现 File Not Found ,等等。
documentzhangx66
2022-05-02 21:19:10 +08:00
看了一下,你好像用的是 Windows ,Windows 有一款叫 Procmon.exe 的程序,可以实现我在上一条评论里说的那种跟踪操作。
freefcw
2022-05-02 21:48:43 +08:00
我估计你直接运行 php 文件的 php,和 mamp 里面的 php 应该不是一个版本,mac 自带了一个 php 版本,mamp 和 mac 自带的不是一个,所以你检查一下看看
freefcw
2022-05-04 12:54:54 +08:00
另外还有一个简单的办法,在 index.php 里面,直接调用 phpinfo();看是否启用了 memcached
freadman
2022-05-05 09:17:17 +08:00
@documentzhangx66 MAC

@freefcw 找到问题了,是 MAMP 里面 PHP8.1.1 版本的 memcached 有问题,现在我切换至 8.0.8 版本 OK 了。
不过出现了一个新问题,那就是我在 MAC 的终端里面是 OK 的,但是在 VScode 里面集成的终端还不行,奇了怪了,这两个终端还调用不同 PHP ?
encro
2022-05-09 14:46:05 +08:00
送分题:

一个是 console 模式,

一个是 fpm 模式,

加载了不同的配置。
freadman
2022-05-23 15:29:36 +08:00
@encro 确实是这个问题,但环境配置不熟,用了 MAMP PRO 来搭建环境,然后 memcached 其实是自带的,折腾来折腾去自己用重新用 brew 安装了 php 8 ,fpm 模式加载的就是这个 PHP ,所以 fpm 模式下是没有装 memcached 的,把这个环境卸载掉,然后配置下全局环境变量,指定系统 PHP 版本到 mamp pro 里面对应的 PHP 就可以了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/850531

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX