PHP - 从格式为 X=Y 的文件中加载数据

PHP - Load data from file with format X=Y

我有一个没有任何格式的文件,名为 .env

所有的值都是这样存储的:X=Y

我的主管告诉我将这些数据加载到我的 PHP 脚本中,我需要这些值作为数组。 他说我可以做到,因为该文件是像 ini 文件一样构建的。但是没有栏目。

我这样试过:

$ini_array = parse_ini_file("../../.env");    // Output: false
$data = include("../../.env");                // Output: 1 -> prints the content of the file into the document

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:WVS0jXq4FBEOHEt2+K3AxyLCvTgq5L/dMhiFd5HZg7Q=
APP_DEBUG=true
APP_URL=http://api-konfigurator.local

JWT_SECRET=5PdNYddJuntDfbErQBg0vnUwwNCJiDy8hc1QMNAFaAWsdKJv2fe6m3ueLbYdYOk3

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=x
DB_USERNAME=y
DB_PASSWORD=z

以上述格式解析文件应该相当简单,但由于某些行可能包含多个 = 符号而稍微复杂一些,例如 APP_KEY

话虽如此,也许以下内容可能有所帮助。

$filepath='c:/temp/fakeini.txt';


$data=array();
$lines=file( $filepath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES );
foreach( $lines as $index => $line ){
    if( !empty( $line ) ){
        $count=substr_count( $line, '=' );
        if( $count > 1 ){
            $pos=strpos($line,'=');
            $param=substr($line,0,$pos);
            $value=substr($line,$pos+1);
        }else{
            list( $param, $value )=explode( '=', trim( $line ) );
        }
        $data[ $param ]=$value;
    }
}

生成如下数组:

Array
(
    [APP_NAME] => Laravel
    [APP_ENV] => local
    [APP_KEY] => base64:WVS0jXq4FBEOHEt2+K3AxyLCvTgq5L/dMhiFd5HZg7Q=
    [APP_DEBUG] => true
    [APP_URL] => http://api-konfigurator.local
    [JWT_SECRET] => 5PdNYddJuntDfbErQBg0vnUwwNCJiDy8hc1QMNAFaAWsdKJv2fe6m3ueLbYdYOk3
    [LOG_CHANNEL] => stack
    [DB_CONNECTION] => mysql
    [DB_HOST] => localhost
    [DB_PORT] => 3306
    [DB_DATABASE] => x
    [DB_USERNAME] => y
    [DB_PASSWORD] => z
)