westerndogの小屋

westerndogの小屋


- ほしいなぁと思って作ってみたWebサービスたちの開発Blog -

PHPでpear Configを使って配列をiniファイルにする

PHPのparse_ini_file関数を使用するとiniファイルを読み込むことができますが、その逆、配列をiniファイルにする手法を調べたところ、pearのConfigパッケージLink を使用すると楽にできることがわかりました。

準備

すでにpearがインストールされていて、pearへのパスが設定されているなら、パッケージを入れるだけです。

$ sudo pear install Config
Did not download optional dependencies: pear/XML_Parser, pear/XML_Util, use --alldeps to download automatically
pear/Config can optionally use package "pear/XML_Parser"
pear/Config can optionally use package "pear/XML_Util"
downloading Config-1.10.12.tgz ...
Starting to download Config-1.10.12.tgz (32,291 bytes)
.........done: 32,291 bytes
install ok: channel://pear.php.net/Config-1.10.12

Configで、iniファイルからXMLファイルへ、XMLファイルから配列へ、などの処理をしたい場合は、XML_Parserを追加インストールするとそれらの機能を使用できるようになります。今回はiniファイルの読み書きだけなので、スルーします。

iniファイルの書き込みサンプル

writeConfig.php

<?php
require_once ("Config.php");

$conf = array(
    'DB' => array(
        'type' => 'mysql',
        'host' => 'localhost',
        'user' => 'root',
        'pass' => 'root'
     ),
    'TT' => array(
        'encode' => 'sjis',
        'path' => './template'
     )
);

$config = new Config();

// 配列をパース
$root =& $config->parseConfig($conf, 'phparray', array('name' => 'conf'));
if( PEAR::isError( $root ) ) {
  die('配列読み込みエラー: ' . $root->getMessage());
}

// iniファイル書き込み
$root =& $config->writeConfig('conf.ini', 'inifile');
if( PEAR::isError( $root ) ) {
  die('設定書き込みエラー: ' . $root->getMessage());
}
?>

実行例

$ php writeConfig.php
$ cat conf.ini
[DB]
type=mysql
host=localhost
user=root
pass=root
[TT]
encode=sjis
path=./template

iniファイルの読み込みサンプル

parseConfig.php

<?php
require_once ("Config.php");

$config = new Config();

// iniファイル読み込み
$root =& $config->parseConfig('./conf.ini', 'inifile');
if( PEAR::isError( $root ) ) {
  die('設定読み込みエラー: ' . $root->getMessage());
}

// 配列作成
$array = $root->toArray();
print_r($array['root']);
?>

実行例

$ php parseConfig.php
Array
(
    [DB] => Array
        (
            [type] => mysql
            [host] => localhost
            [user] => root
            [pass] => root
        )

    [TT] => Array
        (
            [encode] => sjis
            [path] => ./template
        )

)

Configパッケージの他の使い方は、ConfigマニュアルページLink を参照してください。

— posted by westerndog at 02:06 pm