【问题标题】:Laravel SSL connection to MySQL not workingLaravel SSL 与 MySQL 的连接不起作用
【发布时间】:2018-09-14 09:50:08
【问题描述】:

我正在做一个项目,我必须使用 SSL 连接到 MySQL 数据库。这在原版 PHP 中有效,但在我尝试使用 Laravel 时无效。

工作 PHP 代码:

<?php
$host = 'xxx';
$db = 'xxx';
$user = 'xxx';
$pass = 'xxx';
$charset = 'utf8';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES => false,
    PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
    PDO::MYSQL_ATTR_SSL_CA => "../rootCA.pem",
];

try {
    $pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
    throw new \PDOException($e->getMessage(), (int)$e->getCode());
}

$data = $pdo->query('SELECT * FROM x LIMIT 100')->fetchAll(PDO::FETCH_ASSOC);
var_export($data);

但是当我尝试通过 Laravel 连接时,我收到以下错误:

C:\*\*\vendor\laravel\framework\src\Illuminate\Database\Connection.php on line 330
[Fri Sep 14 11:35:05 2018] ::1:54869 [500]: /data - Allowed memory size of 134217728 bytes exhausted (tried to allocate 4096 bytes) in C:\*\*\vendor\laravel\framework\src\Illuminate\Database\Connection.php on line 330

我的 Laravel (5.7) 连接配置:

    'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', 'xxx'),
        'port' => env('DB_PORT', 'xxx'),
        'database' => env('DB_DATABASE', 'xxx'),
        'username' => env('DB_USERNAME', 'xxx'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix' => '',
        'strict' => false,
        'engine' => null,
        'options' => array(
            PDO::MYSQL_ATTR_SSL_CA  => '../rootCA.pem',
            PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false
        ),
    ],

有什么想法吗? =)

【问题讨论】:

    标签: php mysql laravel ssl laravel-5


    【解决方案1】:

    您需要提供文件的完整路径。

    'options' => [
        PDO::MYSQL_ATTR_SSL_KEY => base_path('ssl/client-key.pem'),
        PDO::MYSQL_ATTR_SSL_CERT => base_path('ssl/client-cert.pem'),
        PDO::MYSQL_ATTR_SSL_CA => base_path('ssl/ca-cert.pem')
    ]
    

    请看链接:How do I connect to a MySQL database over SSL with Laravel 5.3

    【讨论】:

    • 感谢您的回答,我也尝试过,不幸的是结果相同。
    • 您好@Tibbelit,请更改 php.ini 中的 memory_limit。像 ;旧限制; memory_limit = 512M ;新限制memory_limit = 2048M
    • 也尝试将其更改为“-1”,但没有帮助:/ VirtualAlloc() failed: [0x00000008] 没有足够的存储空间来处理此命令。 VirtualFree() 失败:[0x000001e7] 尝试访问无效地址。 VirtualAlloc() 失败:[0x00000008] 没有足够的存储空间来处理此命令。 [Fri Sep 14 13:49:08 2018] ::1:57501 [500]: /data - C:\Projects*\vendor\laravel\framework\ 内存不足(分配 838860800)(尝试分配 4096 字节) src\Illuminate\Database\Connection.php 在第 330 行
    【解决方案2】:

    问题不在于它本身的连接。那是我试图从我的 SQL 查询中获取许多行,这(真的很奇怪)给了我这样的错误消息:

    SSL 操作失败,代码为 1。OpenSSL 错误消息:error:1408F10B:SSLroutines:ssl3_get_record:wrong version number

    等等。所以我的错 - 但我希望错误消息可以更好。

    【讨论】:

      猜你喜欢
      • 2017-12-18
      • 2019-04-03
      • 1970-01-01
      • 2021-09-18
      • 2017-06-12
      • 1970-01-01
      • 1970-01-01
      • 2017-03-27
      • 2017-04-07
      相关资源
      最近更新 更多