我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

单单就读取.env配置文件这个需求来说,个人觉得系统自带的parse_ini_file()就挺好用的。当然也并不能完美读取所有市面上的.env文件/.ini文件。但是,parse_ini_file()贵在简洁。相比较vlucas/phpdotenv的令人头大的复杂,parse_ini_file()不得不说是非常简单好用。

苏南大叔:php自带的parse_ini_file函数,是否可以完美读取.env文件? - parse_ini_file
php自带的parse_ini_file函数,是否可以完美读取.env文件?(图6-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码感想感悟。测试环境:win10nginx@1.15.11php@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"
}

苏南大叔:php自带的parse_ini_file函数,是否可以完美读取.env文件? - parse_ini_file-code
php自带的parse_ini_file函数,是否可以完美读取.env文件?(图6-2)

配置分组范例

可以写[]分组,写了多个[]分组的时候,一定要注意:尽量别设置同名的变量,避免误操作同名变量会产生覆盖关系。正确的做法是,给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"
  }
}

苏南大叔:php自带的parse_ini_file函数,是否可以完美读取.env文件? - 没有被覆盖
php自带的parse_ini_file函数,是否可以完美读取.env文件?(图6-3)

当然,没有添加第二个true参数的话,不同分组之间的变量就会相互覆盖,从而产生重大误解。

苏南大叔:php自带的parse_ini_file函数,是否可以完美读取.env文件? - parse_ini_file-code-4
php自带的parse_ini_file函数,是否可以完美读取.env文件?(图6-4)

.env格式注释要求

如果想要parse_ini_file()较为完美的读取.env文件,首先对注释的写法有要求。

  • #开头,要求注释单独成行,不能写在变量后面。(vlucas/phpdotenv则允许写在变量后面)
  • 注释里面不能出现$符号,否则解析失败。

下面的错误的写法:

SERVER_ADDR = 0.0.0.0  # 不能写这后面

苏南大叔:php自带的parse_ini_file函数,是否可以完美读取.env文件? - parse_ini_file-code-2
php自带的parse_ini_file函数,是否可以完美读取.env文件?(图6-5)

SERVER_ADDR = 0.0.0.0
# 不能带$符号

苏南大叔:php自带的parse_ini_file函数,是否可以完美读取.env文件? - parse_ini_file-code-3
php自带的parse_ini_file函数,是否可以完美读取.env文件?(图6-6)

相关文章

结束语

虽然这个parse_ini_file()并不能完美的处理.env文件,但是很简单便捷。如果注意.env文件和普通的ini文件的写法的细微区别的话,这个自带的parse_ini_file(),还是挺好用的。

如果追求降低io读取的频率的话,苏南大叔觉得:

  • 可以把读取结果放在$_SERVER或者$_SESSION里面,就像vlucas/phpdotenv所做的一样。
  • thinkphp的传统做法也是,要使用putenv("$k=$v")的形式,存入到$ENV变量里面。

更多苏南大叔的php经验文章,请点击:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   php