从bash修改PHP配置数组



我正在编写我的第一个BASH脚本来自动配置我的(Laravel) web项目。

我有一些配置文件(app/config/local/database.php, app/config/app.php)与PHP数组,我需要访问和修改。例如:

'providers' => array(
    /** Append new service provider value, if it does not exist already */
    'IlluminateFoundationProvidersArtisanServiceProvider',
    'IlluminateAuthAuthServiceProvider',
    // ...
)

…还是…

'mysql' => array(
    /** Replace value under key "database" to "test_db" */
    'database' => 'homestead',
    'username' => 'homestead',
)

到目前为止,我使用sed表达式如下:

$LV_DB_NAME="test_db"
$LV_DB_FILE="app/config/local/database.php"
gsed -i "s/'database' .*/'database' => '$LV_DB_NAME',/g" $LV_FILE_DB_CONFIG

我觉得这有点乱,特别是在例1的情况下。

什么会很棒

是否有任何方法可以将PHP数组转换为BASH数组并像在PHP中那样工作?

示例1

if (!in_array($new_provider, $providers)) {
    $providers[] = $new_provider;
}
示例2

$config['mysql']['database'] = $database_name

更新:什么也会很棒

如果有任何其他常用的方法如何修改PHP数组使用终端,我将很高兴,如果你指出我!我相信我不是唯一一个需要使用terminal修改PHP配置数组的人。

mTorres其实是对的。如果您的机器安装了php cli(很有可能),那么您可以轻松地从bash脚本跳转到PHP。有多种方法可以做到这一点,我最终选择了这个:

print_s "Putting data to file "$PATH" ... "
export PATH=$PATH
export DATA_JSON=$DATA_JSON
/usr/bin/php << 'EOF'
<?php
    $path = getenv("PATH");
    $data = getenv("DATA_JSON");
    $data = json_decode($data);
    $config = (file_exists($path) && is_array($config_data = require($path))) ? $config_data : array();
    foreach ($data as $k => $v) {
        $config[$k] = $v;
    }
    file_put_contents($path, "<?php n n return ".var_export($config,true).";");
?>
EOF
}

在BASH中传递关联数组有一些陷阱,检查我的其他问题:将BASH关联数组传递到PHP脚本

最新更新