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
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 6

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

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

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

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

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

1年前 评论

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