Laravel 中 .env 文件,数据库密码中包含(#)或特殊字符引来的问题
如果 .env 文件中的配置中包含 #
符号的话,如果不做特殊处理会报错
以数据库配置为例:
DB_CONNECTION=sqlsrv
DB_HOST=localhost
DB_PORT=1433
DB_DATABASE=test-monitor
DB_USERNAME=sa
DB_PASSWORD=!Docker_Pwd@Sql_server2022#0625xx
通过 tinker
获取的配置信息:
Psy Shell v0.11.5 (PHP 8.0.17 — cli) by Justin Hileman
>>> config('database.connections.sqlsrv');
=> [
"driver" => "sqlsrv",
"url" => null,
"host" => "localhost",
"port" => "1433",
"database" => "test-monitor",
"username" => "sa",
"password" => "!Docker_Pwd@Sql_server2022",
"charset" => "utf8",
"prefix" => "",
"prefix_indexes" => true,
]
>>>
注意:可以看到数据库密码,后面的
#0625xx
字符丢失了。所以会导致数据库链接失败。原因是#
符号会屏蔽自身和#
后面的字符。
将密码字符加上单引号或双引号
现在数据库配置为:
DB_CONNECTION=sqlsrv
DB_HOST=localhost
DB_PORT=1433
DB_DATABASE=test-monitor
DB_USERNAME=sa
DB_PASSWORD="!Docker_Pwd@Sql_server2022#0625xx"
现在 tinker
获取的配置信息如下:
Psy Shell v0.11.5 (PHP 8.0.17 — cli) by Justin Hileman
>>> config('database.connections.sqlsrv');
=> [
"driver" => "sqlsrv",
"url" => null,
"host" => "localhost",
"port" => "1433",
"database" => "test-monitor",
"username" => "sa",
"password" => "!Docker_Pwd@Sql_server2022#0625xx",
"charset" => "utf8",
"prefix" => "",
"prefix_indexes" => true,
]
>>>
可以看到,密码的字符串完整的保留了,没有屏蔽。
是的 有这个问题 当成注释了
.env中的配置值如果有空格或其他特殊字符,一律加引号 :smile:
这个坑很难爬 :joy:
数据库密码不要特殊字符,大小写和数字 16位就够了