rob*_*lli 5 php mysql ssl laravel 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')
]
Run Code Online (Sandbox Code Playgroud)
问题是,当我在不使用SSL(例如本地)的环境中将这些env()变量设置为null时,它会中断(白屏等).我必须要么不设置"选项"键或设置为空数组才能使其工作,这会删除env()变量,然后这些变量无法在SSL环境中起作用.
有没有办法满足这个适用于SSL和非SSL环境的密钥?
您可以定义启用或禁用SSL使用的新环境变量,然后使用三元运算符加载适当的配置.
.env
在需要启用数据库SSL的环境中将其添加到您的文件中:
MYSQL_SSL=true // not having this variable defined or being false, will disable SSL
Run Code Online (Sandbox Code Playgroud)
在您的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')
] : []
Run Code Online (Sandbox Code Playgroud)
我经常反对在配置文件中使用逻辑,但这是一种可能发生异常的情况.
归档时间: |
|
查看次数: |
1620 次 |
最近记录: |