V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
freadman
V2EX  ›  PHP

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

  •  
  •   freadman · 2022-05-02 18:30:02 +08:00 · 2161 次点击
    这是一个创建于 935 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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))

    10 条回复    2022-05-23 15:29:36 +08:00
    concernedz
        1
    concernedz  
       2022-05-02 18:52:57 +08:00 via Android
    配置没弄对?
    wonderfulcxm
        2
    wonderfulcxm  
       2022-05-02 18:56:03 +08:00 via iPhone
    没开启扩展吧
    wonderfulcxm
        3
    wonderfulcxm  
       2022-05-02 18:58:41 +08:00 via iPhone
    phpinfo 看看有没有 memcache ,可能加载了不同的 php.ini
    documentzhangx66
        4
    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
        5
    documentzhangx66  
       2022-05-02 21:19:10 +08:00
    看了一下,你好像用的是 Windows ,Windows 有一款叫 Procmon.exe 的程序,可以实现我在上一条评论里说的那种跟踪操作。
    freefcw
        6
    freefcw  
       2022-05-02 21:48:43 +08:00
    我估计你直接运行 php 文件的 php,和 mamp 里面的 php 应该不是一个版本,mac 自带了一个 php 版本,mamp 和 mac 自带的不是一个,所以你检查一下看看
    freefcw
        7
    freefcw  
       2022-05-04 12:54:54 +08:00
    另外还有一个简单的办法,在 index.php 里面,直接调用 phpinfo();看是否启用了 memcached
    freadman
        8
    freadman  
    OP
       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
        9
    encro  
       2022-05-09 14:46:05 +08:00
    送分题:

    一个是 console 模式,

    一个是 fpm 模式,

    加载了不同的配置。
    freadman
        10
    freadman  
    OP
       2022-05-23 15:29:36 +08:00
    @encro 确实是这个问题,但环境配置不熟,用了 MAMP PRO 来搭建环境,然后 memcached 其实是自带的,折腾来折腾去自己用重新用 brew 安装了 php 8 ,fpm 模式加载的就是这个 PHP ,所以 fpm 模式下是没有装 memcached 的,把这个环境卸载掉,然后配置下全局环境变量,指定系统 PHP 版本到 mamp pro 里面对应的 PHP 就可以了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2811 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 07:26 · PVG 15:26 · LAX 23:26 · JFK 02:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.