从bash修改PHP配置数组

时间:2014-08-17 16:47:28

标签: php arrays bash configuration sed

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

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

'providers' => array(
    /** Append new service provider value, if it does not exist already */
    'Illuminate\Foundation\Providers\ArtisanServiceProvider',
    'Illuminate\Auth\AuthServiceProvider',
    // ...
)

......或......

'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数组,如果你指点我,我会很高兴的!我确定我不是唯一需要使用终端修改PHP配置数组的人。

1 个答案:

答案 0 :(得分:1)

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中有一些传递关联数组的问题,请查看我的另一个问题:Pass BASH associative arrays to PHP script