php自带的parse_ini_file函数,是否可以完美读取.env文件?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
单单就读取.env
配置文件这个需求来说,个人觉得系统自带的parse_ini_file()
就挺好用的。当然也并不能完美读取所有市面上的.env
文件/.ini
文件。但是,parse_ini_file()
贵在简洁。相比较vlucas/phpdotenv
的令人头大的复杂,parse_ini_file()
不得不说是非常简单好用。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码感想感悟。测试环境:win10
,nginx@1.15.11
,php@8.2.10-nts
。
迷你范例
.env
文件:
WWW = 苏南大叔的博客newsn.net
[database]
user = root
password = secret
php
代码:
$env = parse_ini_file('.env');
var_dump($env);
运行结果:
array(3) {
["WWW"]=>
string(30) "苏南大叔的博客newsn.net"
["user"]=>
string(4) "root"
["password"]=>
string(6) "secret"
}
配置分组范例
可以写[]
分组,写了多个[]
分组的时候,一定要注意:尽量别设置同名的变量,避免误操作同名变量会产生覆盖关系。正确的做法是,给parse_ini_file()
添加第二个参数true
。
.env
:
[database]
user = root
password = secret
[database2]
user = root2
password = secret2
$env = parse_ini_file('.env',true);
var_dump($env);
输出值:
array(2) {
["database"]=>
array(2) {
["user"]=>
string(4) "root"
["password"]=>
string(6) "secret"
}
["database2"]=>
array(2) {
["user"]=>
string(5) "root2"
["password"]=>
string(7) "secret2"
}
}
当然,没有添加第二个true
参数的话,不同分组之间的变量就会相互覆盖,从而产生重大误解。
.env格式注释要求
如果想要parse_ini_file()
较为完美的读取.env
文件,首先对注释的写法有要求。
- 以
#
开头,要求注释单独成行,不能写在变量后面。(vlucas/phpdotenv
则允许写在变量后面) - 注释里面不能出现
$
符号,否则解析失败。
下面的错误的写法:
SERVER_ADDR = 0.0.0.0 # 不能写这后面
SERVER_ADDR = 0.0.0.0
# 不能带$符号
相关文章
- https://newsn.net/say/php-yaml-parse.html
- https://newsn.net/say/php-dotenv.html
- https://newsn.net/say/php-putenv-getenv.html
结束语
虽然这个parse_ini_file()
并不能完美的处理.env
文件,但是很简单便捷。如果注意.env
文件和普通的ini
文件的写法的细微区别的话,这个自带的parse_ini_file()
,还是挺好用的。
如果追求降低io
读取的频率的话,苏南大叔觉得:
- 可以把读取结果放在
$_SERVER
或者$_SESSION
里面,就像vlucas/phpdotenv
所做的一样。 thinkphp
的传统做法也是,要使用putenv("$k=$v")
的形式,存入到$ENV
变量里面。
更多苏南大叔的php
经验文章,请点击:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。