php - Laravel .env 文件中环境特定的 SSL 配置

标签 php mysql laravel ssl laravel-5.1

我正在运行 Laravel 5.1 并有多个环境,有些需要 SSL,有些则不需要。当我需要 SSL 时,我在 database.php 中的配置需要 mysql 驱动程序中的以下内容:

'options'   => [
    PDO::MYSQL_ATTR_SSL_KEY     => env('MYSQL_SSL_KEY'), // /path/to/key.pem
    PDO::MYSQL_ATTR_SSL_CERT    => env('MYSQL_SSL_CERT'), // /path/to/cert.pem
    PDO::MYSQL_ATTR_SSL_CA      => env('MYSQL_SSL_CA'), // /path/to/ca.pem
    PDO::MYSQL_ATTR_SSL_CIPHER  => env('MYSQL_SSL_CIPHER')
]

问题是,当我在不使用 SSL 的环境(例如本地)中将这些 env() 变量设置为 null 时,它会中断(白屏等)。我必须要么不设置“选项”键,要么设置为一个空数组才能使其工作,这会删除 env() 变量,后者将无法在 SSL 环境中工作。

有没有办法满足这个既适用于 SSL 环境又适用于非 SSL 环境的 key ?

最佳答案

您可以定义一个启用或禁用 SSL 使用的新环境变量,然后使用三元运算符加载适当的配置。

在需要启用数据库 SSL 的环境中将此添加到 .env 文件中:

MYSQL_SSL=true // not having this variable defined or being false, will disable SSL

在您的 config/database.php 文件中,修改要加载的连接的 options 键值,如下所示:

'options' => (env('MYSQL_SSL')) ? [
    PDO::MYSQL_ATTR_SSL_KEY    => env('MYSQL_SSL_KEY'),  // /path/to/key.pem
    PDO::MYSQL_ATTR_SSL_CERT   => env('MYSQL_SSL_CERT'), // /path/to/cert.pem
    PDO::MYSQL_ATTR_SSL_CA     => env('MYSQL_SSL_CA'),   // /path/to/ca.pem
    PDO::MYSQL_ATTR_SSL_CIPHER => env('MYSQL_SSL_CIPHER')
] : []

我通常反对在配置文件中使用逻辑,但在这种情况下可能会出现异常。

关于php - Laravel .env 文件中环境特定的 SSL 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33741546/

相关文章:

php - 为什么调用 __call 而不是 __callStatic

javascript - Laravel Vue.js 应用程序未运行

PHP 访问系统 - OR 函数

php - 如何在php中显示SUM()

php - 元素与 xpath 未找到 codeception

php - Laravel - 从字符串转换日期和/或时间时转换失败

mysql - 无法从C程序连接到mysql套接字

带有 WHERE id IN (SELECT ...) 的 mysqldump 产生表 "was not locked"错误

php - 我如何创建一个 mysql_query 来提取使用贝叶斯平均值排名的项目?

php - 我如何自定义重置密码验证消息以及表单验证?