第245行ConnectionFactory.php中的不同错误 - Laravel 5.4

时间:2018-05-29 13:00:04

标签: php laravel apache pdo laravel-5.4

我已经多次更新了这个问题,但原来的问题大部分都是完整的,所以我的思维过程更容易理解。我已经为每个人添加了一个简短的摘要,以决定他们是否能够帮助解决这个问题。非常感谢任何帮助。

摘要

  • 很少发生错误(每2-4周一次)。
  • 发生错误后,每次访问数据库的进一步请求也会崩溃并出现相同的错误
  • 在laravel / framework
  • 中创建MySqlConnector时似乎发生了错误
  • 到目前为止,错误只发生在我们这个应用程序的实时服务器上,因此我们不能保留错误并开始调试,但必须对其进行热修复以保持正常运行时间。
  • 我们确实遇到了一些随机断开连接的问题(很少)。这开始于同一时刻。也许问题是在构建PDO连接时断开连接?

堆栈

  • Apache 2.4.32
  • PHP 7.1.15
  • MariaDB 10.2.6

详细问题

我们在其中一个laravel项目中遇到以下错误:

[2018-05-29 11:02:05] production.ERROR:
Symfony\Component\Debug\Exception\FatalThrowableError: Illegal offset type in C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Connectors\ConnectionFactory.php:245
Stack trace:
#0 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Connectors\ConnectionFactory.php(183): Illuminate\Database\Connectors\ConnectionFactory->createConnector(Array)
#1 [internal function]: Illuminate\Database\Connectors\ConnectionFactory->Illuminate\Database\Connectors\{closure}()
#2 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Connection.php(883): call_user_func(Object(Closure))
#3 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Connection.php(445): Illuminate\Database\Connection->getPdo()
#4 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Connection.php(640): Illuminate\Database\Connection->Illuminate\Database\{closure}('insert into `lo...', Array)
#5 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Connection.php(607): Illuminate\Database\Connection->runQueryCallback('insert into `lo...', Array, Object(Closure))
#6 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Connection.php(450): Illuminate\Database\Connection->run('insert into `lo...', Array, Object(Closure))
#7 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Connection.php(404): Illuminate\Database\Connection->statement('insert into `lo...', Array)
#8 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Query\Processors\Processor.php(32): Illuminate\Database\Connection->insert('insert into `lo...', Array)
#9 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Query\Builder.php(2138): Illuminate\Database\Query\Processors\Processor->processInsertGetId(Object(Illuminate\Database\Query\Builder), 'insert into `lo...', Array, 'id')
#10 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Builder.php(1251): Illuminate\Database\Query\Builder->insertGetId(Array, 'id')
#11 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php(684): Illuminate\Database\Eloquent\Builder->__call('insertGetId', Array)
#12 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php(649): Illuminate\Database\Eloquent\Model->insertAndSetId(Object(Illuminate\Database\Eloquent\Builder), Array)
#13 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php(518): Illuminate\Database\Eloquent\Model->performInsert(Object(Illuminate\Database\Eloquent\Builder))
#14 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Builder.php(734): Illuminate\Database\Eloquent\Model->save()
#15 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Support\helpers.php(950): Illuminate\Database\Eloquent\Builder->Illuminate\Database\Eloquent\{closure}(Object(App\Error))
#16 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Builder.php(735): tap(Object(App\Error), Object(Closure))
#17 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php(1357): Illuminate\Database\Eloquent\Builder->create(Array)
#18 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php(1369): Illuminate\Database\Eloquent\Model->__call('create', Array)
#19 C:\Webserver\Websites\www.somedomain.com\webroot\app\Exceptions\Handler.php(246): Illuminate\Database\Eloquent\Model::__callStatic('create', Array)
#20 C:\Webserver\Websites\www.somedomain.com\webroot\app\Exceptions\Handler.php(217): App\Exceptions\Handler->logErrorAndNotify(Array, Object(Symfony\Component\Debug\Exception\FatalThrowableError))
#21 C:\Webserver\Websites\www.somedomain.com\webroot\app\Exceptions\Handler.php(106): App\Exceptions\Handler->logThenRenderServerException(Object(Illuminate\Http\Request), Object(Symfony\Component\Debug\Exception\FatalThrowableError), 500)
#22 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(326): App\Exceptions\Handler->render(Object(Illuminate\Http\Request), Object(Symfony\Component\Debug\Exception\FatalThrowableError))
#23 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(124): Illuminate\Foundation\Http\Kernel->renderException(Object(Illuminate\Http\Request), Object(Symfony\Component\Debug\Exception\FatalThrowableError))
#24 C:\Webserver\Websites\www.somedomain.com\webroot\public\index.php(53): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#25 {main}  

首次发生此错误后,对网站的所有请求都会触发完全相同的错误。

谷歌搜索我发现的所有问题是以下2个解决方案:

  1. 运行php artisan config:cachephp artisan config:clear
  2. 重新启动网络服务器
  3. 可以找到找到这些解决方案的一个示例here

    现在重新启动网络服务器工作,但在一小时内我们又遇到了同样的问题。是否有其他重启并且它现在似乎有效,但我想知道是什么导致这种情况以及我们如何防止它?

    更多信息:

    • 我们正在使用Redis缓存包括配置在内的所有内容。
    • 使用自定义apache堆栈完成托管。
    • 该网站已经运行了几个月,但有些重启,但从未遇到过这个问题。
    • 今天第一次发生问题时,服务器已经填满了它的内存容量,第二次它发生了15 GB的内存。

    任何线索或建议都会非常感激。如果需要更多信息来回答问题,我会在被要求时尝试扩展问题。

    更新

    所以我们再次出现错误,同一行但不同的错误。我认为构建PDO连接出了问题,然后存储该连接以便在一段时间内再次用于所有未来的请求?

    这是新的堆栈跟踪:

    [2018-06-25 15:27:38] production.ERROR: Symfony\Component\Debug\Exception\FatalThrowableError: Undefined class constant 'PDO::ATTR_CASE' in C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Connectors\ConnectionFactory.php:245
    Stack trace:
    #0 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Connectors\ConnectionFactory.php(183): Illuminate\Database\Connectors\ConnectionFactory->createConnector(Array)
    #1 [internal function]: Illuminate\Database\Connectors\ConnectionFactory->Illuminate\Database\Connectors\{closure}()
    #2 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Connection.php(883): call_user_func(Object(Closure))
    #3 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Connection.php(904): Illuminate\Database\Connection->getPdo()
    #4 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Connection.php(392): Illuminate\Database\Connection->getReadPdo()
    #5 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Connection.php(318): Illuminate\Database\Connection->getPdoForSelect(true)
    #6 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Connection.php(640): Illuminate\Database\Connection->Illuminate\Database\{closure}('select * from `...', Array)
    #7 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Connection.php(607): Illuminate\Database\Connection->runQueryCallback('select * from `...', Array, Object(Closure))
    #8 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Connection.php(326): Illuminate\Database\Connection->run('select * from `...', Array, Object(Closure))
    #9 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Query\Builder.php(1710): Illuminate\Database\Connection->select('select * from `...', Array, true)
    #10 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Query\Builder.php(1695): Illuminate\Database\Query\Builder->runSelect()
    #11 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Builder.php(462): Illuminate\Database\Query\Builder->get(Array)
    #12 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Builder.php(446): Illuminate\Database\Eloquent\Builder->getModels(Array)
    #13 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Concerns\BuildsQueries.php(75): Illuminate\Database\Eloquent\Builder->get(Array)
    #14 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Builder.php(391): Illuminate\Database\Eloquent\Builder->first(Array)
    #15 C:\Webserver\Websites\www.somedomain.com\webroot\app\Http\Controllers\Webshop\HomeController.php(268): Illuminate\Database\Eloquent\Builder->firstOrFail()
    #16 [internal function]: App\Http\Controllers\Webshop\HomeController->showArticleDetail('BOSAL-287-273-1...')
    #17 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Routing\Controller.php(55): call_user_func_array(Array, Array)
    #18 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php(44): Illuminate\Routing\Controller->callAction('showArticleDeta...', Array)
    #19 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Routing\Route.php(203): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(App\Http\Controllers\Webshop\HomeController), 'showArticleDeta...')
    #20 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Routing\Route.php(160): Illuminate\Routing\Route->runController()
    #21 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Routing\Router.php(574): Illuminate\Routing\Route->run()
    #22 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(30): Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #23 C:\Webserver\Websites\www.somedomain.com\webroot\app\Http\Middleware\Localization.php(43): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #24 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(148): App\Http\Middleware\Localization->handle(Object(Illuminate\Http\Request), Object(Closure))
    #25 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #26 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Routing\Middleware\SubstituteBindings.php(41): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #27 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(148): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), Object(Closure))
    #28 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #29 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken.php(65): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #30 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(148): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
    #31 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #32 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\View\Middleware\ShareErrorsFromSession.php(49): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #33 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(148): Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure))
    #34 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #35 C:\Webserver\Websites\www.somedomain.com\webroot\app\Http\Middleware\ConfigureBugsnap.php(36): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #36 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(148): App\Http\Middleware\ConfigureBugsnap->handle(Object(Illuminate\Http\Request), Object(Closure))
    #37 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #38 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Session\Middleware\StartSession.php(64): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #39 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(148): Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure))
    #40 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #41 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse.php(37): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #42 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(148): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure))
    #43 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #44 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Cookie\Middleware\EncryptCookies.php(59): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #45 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(148): Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure))
    #46 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #47 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(102): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #48 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Routing\Router.php(576): Illuminate\Pipeline\Pipeline->then(Object(Closure))
    #49 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Routing\Router.php(535): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
    #50 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Routing\Router.php(513): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
    #51 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(176): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
    #52 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(30): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
    #53 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\spatie\laravel-robots-middleware\src\RobotsMiddleware.php(14): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #54 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(148): Spatie\RobotsMiddleware\RobotsMiddleware->handle(Object(Illuminate\Http\Request), Object(Closure))
    #55 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #56 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php(30): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #57 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(148): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
    #58 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #59 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php(30): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #60 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(148): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
    #61 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #62 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\ValidatePostSize.php(27): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #63 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(148): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), Object(Closure))
    #64 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #65 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode.php(46): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #66 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(148): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
    #67 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #68 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(102): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #69 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(151): Illuminate\Pipeline\Pipeline->then(Object(Closure))
    #70 C:\Webserver\Websites\www.somedomain.com\webroot\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(116): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
    #71 C:\Webserver\Websites\www.somedomain.com\webroot\public\index.php(53): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
    #72 {main}
    

    错误行再次出现在laravel / framework的ConnectionFactory的第245行。此行是以下函数中的return new MySQLConnector;行:

    /**
     * Create a connector instance based on the configuration.
     *
     * @param  array  $config
     * @return \Illuminate\Database\Connectors\ConnectorInterface
     *
     * @throws \InvalidArgumentException
     */
    public function createConnector(array $config)
    {
        if (! isset($config['driver'])) {
            throw new InvalidArgumentException('A driver must be specified.');
        }
    
        if ($this->container->bound($key = "db.connector.{$config['driver']}")) {
            return $this->container->make($key);
        }
    
        switch ($config['driver']) {
            case 'mysql':
                return new MySqlConnector;
            case 'pgsql':
                return new PostgresConnector;
            case 'sqlite':
                return new SQLiteConnector;
            case 'sqlsrv':
                return new SqlServerConnector;
        }
    
        throw new InvalidArgumentException("Unsupported driver [{$config['driver']}]");
    }
    

    类MySqlConnector扩展了类Connector。 Connecter的前几行是:

    <?php
    
    namespace Illuminate\Database\Connectors;
    
    use PDO;
    use Exception;
    use Illuminate\Support\Arr;
    use Doctrine\DBAL\Driver\PDOConnection;
    use Illuminate\Database\DetectsLostConnections;
    
    class Connector
    {
        use DetectsLostConnections;
    
        /**
         * The default PDO connection options.
         *
         * @var array
         */
        protected $options = [
            PDO::ATTR_CASE => PDO::CASE_NATURAL,
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,
            PDO::ATTR_STRINGIFY_FETCHES => false,
            PDO::ATTR_EMULATE_PREPARES => false,
        ];
    

    似乎应该设置PDO :: ATTR_CASE。或者也许还没有设置PDO :: CASE_NATURAL?我并不完全理解究竟发生了什么,但在创建新的MySqlConnecter对象或创建底层连接器时,它会返回未设置的错误。首先我认为它与课堂上的一些功能有关。但是看到Trace在创建时停止意味着错误不能真正来自任何函数。

    因此,我认为使用PDO课程会出现问题吗? Connecter.php在开头也有以下行:&#39;使用Doctrine \ DBAL \ Driver \ PDOConnection;&#39;这也扩展了PDO。

    一旦发生这种情况,每个用户的进一步请求都会给堆栈跟踪带来相同的错误,直到我们重新启动Apache,这根本就不了解。看起来如果PDO文件不可用,可能会发生,但我不确定为什么它会继续发生,以及为什么重启Apache会解决它。

    以下是可能有助于解决问题的子问题:

    1. 导致出现此错误的原因是什么?
    2. 如果上述问题无法轻易解决,我该怎么做才能更好地理解这个问题?它在我们的现场环境中很少出现,所以我们没有机会只是将dd放在任何地方,一步一步地完成它。并且每次只需重新启动Apache就必须达到quickfix。
    3. 为什么初始故障后的每个请求都会因同样的错误而失败?

2 个答案:

答案 0 :(得分:3)

我们最后一次尝试重启MySQL Server以及Apache。 (按此顺序)似乎已经解决了这个问题。以防我们那天晚上重启服务器。

这为我们解决了这个问题,但是如果某人有更好的答案,并且知道导致问题的原因,我希望他们分享他们的知识!

编辑:仍然没有修复,似乎是一个临时修复。

答案 1 :(得分:2)

到目前为止,这里有三个建议:

  • 确保您的数据库配置正确设置并以这种方式保留(因此,在服务器端读取的变量没有任何变化……不仅是从.env文件中更改)。这可能与缓存和当前数据库设置之间的某种冲突有关。详细查看;
  • 确保您的php版本符合laravel 5.4的要求,因为这种类型的错误很容易由当前php版本中不存在的语法引起,该语法在后台的某个给定位置使用,从后端服务器上获取工作被破坏了;
  • 这也可能与您正在使用的php版本的MySQL PDO驱动程序的可用性有关,因此无法访问有关PDO类内部内容的功能块。这对我来说听起来最合理,因此您可以在此问题上进行更深入的研究。重点关注正在使用的某些PHP和PDO模块周围的设置。

此外,还应考虑服务器端配置错误(例如apache或服务器管理),因为错误的输入可能会传递给基本的laravel层并导致意外的行为。不幸的是,堆栈跟踪和有关错误的信息不足以精确地诊断问题。不过,请让我继续关注,这似乎很有趣。