【问题标题】:Laravel: Fatal Error: Memory Bytes Exhausted With Remote DatabaseLaravel:致命错误:远程数据库耗尽内存字节
【发布时间】:2018-08-14 16:07:02
【问题描述】:

我有一个 Laravel (5.5) 网络应用程序,我正在尝试连接远程数据库。我正在使用 Apache、PHP 7.0 和 MySQL。 Laravel 使用 PDO,当使用远程 DB 信息调用该类时,我收到 500 服务器错误:

PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) in /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php on line 67

几点说明:

  • 在本地使用相同的数据库时,应用程序加载没有问题
  • 我可以使用 Sequel Pro 连接到远程数据库
  • 我也可以从 Laravel 服务器的命令行(以 root 身份)连接到远程数据库
  • 我已将 PHP memory_limit 设置为 -1

这是我的配置文件(.env 中的信息相同):

'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', 'xxx.xxx.xxx.xxx'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'xxxxxx'),
    'username' => env('DB_USERNAME', 'xxxxxx'),
    'password' => env('DB_PASSWORD', 'xxxxxx'),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'strict' => false,
    'engine' => null,
    'sslmode' => env('DB_SSLMODE', 'prefer'),
    'options' => array(
        PDO::MYSQL_ATTR_SSL_KEY => '/var/lib/mysql/client-key.pem',
        PDO::MYSQL_ATTR_SSL_CERT => '/var/lib/mysql/client-cert.pem',
        PDO::MYSQL_ATTR_SSL_CA => '/var/lib/mysql/ca.pem',
    ),   
],

如果有人有任何想法或建议,那就太棒了。

谢谢,

迈克

【问题讨论】:

  • 那么我必须假设您没有编辑正确的php.ini 文件。或者您在编辑后没有重新启动 Apache。因为134217728 在我看来很像默认的128Meg
  • 嗯,我会仔细检查,谢谢提醒
  • 我检查了当前加载的 php.ini memory_limit 设置为-1。重新启动 Apache 以确保仍然得到相同的错误。

标签: php mysql laravel pdo


【解决方案1】:

我在 larachat 的人们的恩典下想通了。问题出在异常处理程序上。 context() 函数尝试获取用户数据以进行错误报告。然后handler会尝试查询数据库,然后报错,再尝试获取用户信息,导致死循环。

临时修复是修改/Foundation/Exception/Handler.php中的report()函数:

$logger->error(
    $e->getMessage(),
    ['exception' => $e]
);

【讨论】:

    猜你喜欢
    • 2015-07-02
    • 2011-07-12
    • 2020-08-21
    • 1970-01-01
    • 2020-02-05
    • 2017-12-13
    • 2012-04-20
    • 2017-06-21
    • 1970-01-01
    相关资源
    最近更新 更多