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,
   ]

>>>

可以看到,密码的字符串完整的保留了,没有屏蔽。

Xiao Peng
laravel_peng
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 6

是的 有这个问题 当成注释了

1年前 评论
laravel_peng (楼主) 1年前
Mutoulee

.env中的配置值如果有空格或其他特殊字符,一律加引号 :smile:

1年前 评论
laravel_peng (楼主) 1年前

数据库密码不要特殊字符,大小写和数字 16位就够了

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!