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/…
みたいに具体的なパスに展開されるわけです。
なにかいい方法ないかなぁ。