【问题标题】:Laravel Lumen Memcached not found未找到 Laravel Lumen Memcached
【发布时间】:2015-06-29 13:53:43
【问题描述】:

好的,我刚开始使用 Lumen,我正在尝试使用 Auth,但是调用 Auth::check 或 Auth.. 的任何其他函数会导致以下错误 致命错误:在第 52 行的 vendor\illuminate\cache\MemcachedConnector.php 中找不到类“Memcached”。 我不想用 Memcached 以前没用过。

我在 .env 文件中禁用它并将 CACHE_DRIVERSESSION_DRIVER 设置为数组,但仍然显示相同的错误。

我决定不再使用 Auth 并使用会话/令牌手动处理我的身份验证,但启用 MiddleWare StartSession 会导致相同的错误。

$app->middleware([
 // 'Illuminate\Cookie\Middleware\EncryptCookies',
 // 'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
  'Illuminate\Session\Middleware\StartSession',
 // 'Illuminate\View\Middleware\ShareErrorsFromSession',
 // 'Laravel\Lumen\Http\Middleware\VerifyCsrfToken',
]);

如果有人真的可以在这里帮助我,我会很高兴

编辑

在框架中深入一点之后 我在SessionManager 类中硬编码了会话驱动程序名称 在getSessionConfig方法内

public function getSessionConfig()
{
    $this->setDefaultDriver("cookie");//I added this line
    return $this->app['config']['session'];
}

它虽然有效,但不是一种好的做事方式。 没有配置文件,我相信所有配置都写在.env文件中,但我真的不知道为什么session_driver和cache_driver默认为memecached,即使在中更改了它。 env 然后运行composer dump-autoload ... Lumen :(

编辑 这是我的 .env 文件

APP_ENV=local
APP_DEBUG=true
APP_KEY=SomeRandomKey!!!

APP_LOCALE=en
APP_FALLBACK_LOCALE=en

DB_CONNECTION=mysql
DB_HOST=localhost
DB_DATABASE=test
DB_USERNAME=root
DB_PASSWORD=

CACHE_DRIVER=array
SESSION_DRIVER=cookie
QUEUE_DRIVER=database

我的 bootsrap/app.php 中已取消注释此行

 Dotenv::load(__DIR__.'/../');

我的数据库配置运行良好,因此加载了 .env 文件 很好。

【问题讨论】:

  • 抱歉,您是否已经按照文档步骤进行操作? lumen.laravel.com/docs/authentication
  • 和缓存文档? lumen.laravel.com/docs/cache
  • 你能插入你的 .env 文件吗?
  • @lorenz 我明确表示我不想使用 memcache,所以我真的不知道它是如何回答我的问题的 + 我没有足够的声誉来投票给你,对不起不是我。
  • 您可能需要重新启动服务器,尤其是在您使用php artisan serve 时。我遇到了完全相同的问题 - 尝试使用文件缓存,但收到有关 Memcached 的错误 - 重新启动服务器会重新加载 .env。似乎没有根据请求获取更改。

标签: php laravel memcached lumen


【解决方案1】:

这个问题在我安装这个包后解决了,所以至少尝试一下

首先我试过了,效果很好

CACHE_DRIVER = array 

但后来想想memcached是什么

然后我尝试了这个,它可以在不更改驱动程序的情况下正常工作memcached

apt-get install php-memcached 

yum 包管理器或在 Amazon Linux 中。

yum install php-memcached -y

【讨论】:

  • 这确实应该是最好的答案,而所有其他答案只是通过使用另一个缓存驱动程序来解决。附言在 Amazon Linux 中使用 yum install php-memcached -y
  • 哇,这发生在我做 apt install upgrade 之后,结果发现来自 php7.3 的 memcached 已因某种未知原因被卸载。我尝试了这个解决方案并恢复了网站
【解决方案2】:

我今天花了 3 个小时来解决这个问题。在本主题中the post of demve 的帮助下,我找到了解决方案。很简单!我希望它不会影响我以后的发展。

仅此而已,在 .env 文件中:

CACHE_DRIVER=array
SESSION_DRIVER=array
QUEUE_DRIVER=array

好的,我进行了 UPDATE,因为我遇到了有关会话的新问题。事实上,当你设置了前面的参数时,你的会话不会是持久的,就像documentation中所说的:array - sessions will be stored in a simple PHP array and will not be persisted across requests.

所以我必须改变它,总是在 .env 这样的文件中:

SESSION_DRIVER=cookie

有了var_dump(Session::all());,我现在可以看到我的会话的全部值

【讨论】:

  • “解决方案”一词具有误导性。这是一种解决方法。你没有修复 memcached,你只是使用了别的东西。
【解决方案3】:

如果您的 .env 文件由尝试运行 artisan 命令的用户以外的其他用户拥有,则会发生这种情况。

【讨论】:

    【解决方案4】:

    如果您安装了新的流明, 您必须将 .env.example 重命名为 .env 。所以它可以读取你的配置!

    【讨论】:

    • @AnandPandey 它对我有用!考虑“最佳答案”=>它无法读取或加载 .env 文件。新手总是忘记重命名这个文件!这是答案之一!我看你也是新手,对laravel一无所知!!!
    • 好吧,我不想和你争论。是的,我是一个新手,将流明与招摇和双场相结合。它不是您提供的解决方案,我已经在文档中阅读过。
    • 这是一个对我有用的答案。 - 很容易忘记这样做。
    【解决方案5】:

    在您的.env 文件中,您也可以使用CACHE_DRIVER=file 代替CACHE_DRIVER=memcached

    【讨论】:

    • 这对我有用!我在共享主机环境中,不能重新启动。 :D
    【解决方案6】:

    在.env文件中替换

    #This line:- 
      CACHE_DRIVER = memcached
    
    #With this:- 
       CACHE_DRIVER = array
    

    【讨论】:

    • 你仍然可以使用 memcache 吗?
    • @user269867 没有请评论#CACHE_DRIVER = memcached
    • 这在“我只是想让 Lumen 第一次运行”的上下文中对我有用。
    【解决方案7】:

    检查memcached是否安装,如果没有安装运行:

    apt-get install php5-memcached
    

    【讨论】:

      【解决方案8】:

      对我来说,问题是我使用了 homestead 存储库的 php-7 分支,它没有准备好 PHP memcached。

      【讨论】:

      【解决方案9】:

      就我而言,我在 .env 文件中添加了 CACHE_DRIVER=array
      那么

      Dotenv::load(__DIR__.'/../');
      

      在我的bootstrap/app.php.env 文件中开始工作。

      【讨论】:

        【解决方案10】:

        我现在遇到了类似的问题,我无法找到它,但我猜测这与默认配置存储在 vendor/laravel/lumen-framework/config 文件夹、DotEnv::$inmutable 设置和artisan serveserver.

        对我有用的解决方案是:

        1. 添加bootstrap/app.php以下内容: Dotenv::makeMutable(); Dotenv::load(__DIR__.'/../'); Dotenv::makeImmutable();

        2. .env 文件中,将所有配置设置为“基本驱动程序”(数组、文件),即使您不打算使用它们,因为您需要

        【讨论】:

        • 这似乎适用于 Lumen 5.2!您能否为此解决方案提供更多信息?为什么这行得通? makeMuteable() 有什么作用?
        • MakeMutable 设置 Dotenv 对象以覆盖其先前的值。
        【解决方案11】:

        确保不要被未加载的 .env 文件所吸引,默认情况下它在 Lumen 中被注释掉。因此,如果您在 .env 中指定不同的缓存驱动程序,请执行以下操作。

        注意:如果您使用 .env 文件来配置您的应用程序,请不要忘记在 bootstrap/app.php 文件中取消注释 Dotenv::load() 方法。

        来源:http://lumen.laravel.com/docs/cache

        【讨论】:

          【解决方案12】:

          您可能需要重新启动服务器,尤其是在您使用php artisan serve 时。

          Lumen 似乎没有根据请求接收.env 更改。

          我遇到了完全相同的问题 - 尝试使用文件缓存,但收到有关 Memcached 的错误 - 重新启动服务器会重新加载 .env 文件。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-10-04
            • 2020-03-21
            • 2016-03-12
            • 2015-03-15
            • 2015-08-25
            • 2017-10-24
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多