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
)
我有一个没有任何格式的文件,名为 .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
)