読者です 読者をやめる 読者になる 読者になる

localdisk

PHP とか Java とか Web とか好きなことを書きます。

var_export 関数を使って設定ファイルを書き換えてみる

例えばCMSのインストーラーとかを作ってる時に、設定ファイルを書き換えたいということがあると思います。今までは file_get_contents で読み込んで正規表現を使って置換していたわけだけど、もうちょっとうまくいかないかなぁと考えてみました。

例えばこんな設定ファイル (config.php) があって

<?php
$config = array('connections' => array(
  'mysql' => array(
    'driver'    => 'mysql',
    'host'      => 'localhost',
    'database'  => 'database',
    'username'  => 'root',
    'password'  => '',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
    ),
  ),
);

こうするのはどうだろうと

<?php
require './config.php';

$config['connections']['mysql']['password'] = 'bar';

$str = var_export($config, true);

$str = '<?php'. "\n" . '$config = ' . $str . ';';

file_put_contents('print.php', $str);

結果 (print.php) はこんな感じ。ちゃんと password の部分に bar と入ってますね。

<?php
$config = array (
  'connections' => 
    'mysql' => 
    array (
      'driver' => 'mysql',
      'host' => 'localhost',
      'database' => 'database',
      'username' => 'root',
      'password' => 'bar',
      'charset' => 'utf8',
      'collation' => 'utf8_unicode_ci',
      'prefix' => '',
    ),
  ),
);

この var_export という関数が変数の文字列表現を返してくれるんですね。便利。

…とここで終わればよかったんですが、この var_export 定数を展開するんですね。考えてみれば当たり前なわけですが…。
なので、例えば設定ファイルに __DIR__ とかが入ってると Users/… みたいに具体的なパスに展開されるわけです。

なにかいい方法ないかなぁ。