On twitter

看來有工作可以交派給偉彬了 lol

follow me on twitter

用 YAML 來作設定檔 4

在一年前就有讀過這一篇 Rails for PHP Developers – PHP, Meet YAML, 只是當時都還在忙唱片的東西, 沒有時間碰, 不過最近在自己實作 framework, 研究 CodeIgniterKohana 這兩個 framework 的做法, 一邊學習 PHP。 而在某些 library 會需要設定檔, 所以想要用 YAML 來作, 畢竟 PHP 變數的設定擋方式, 看起來真的很糟糕 Orz ( 不過效能就不知道會差多少 )

所以找了一下 PHP 上的關於 YAML 的 library, 找到了下面這幾個。

基本上應該是用 pecl-syck 會比較好, extension 會比較快 (?)

在 gentoo 上裝, 就打 emerge pecl-syck 就可以裝好了, 接著就有兩個 function 可以用 syck_loadsycn_dump

另外我又找了 spyc 這個 php class, 因為在 Mac 上裝 pecl-syck 真的是太麻煩了, 直接用 class 來作方便許多, 而且對於 PHP deployment, spyc 也是一個比較好的方法, 畢竟不是每個人都可以裝 pecl-syck。而 spyc 也是提供兩個 static method, Spyc::YAMLLoadSpyc::YAMLDump

所以我就又另外寫了一個 wrapper 叫 Yaml 的 class, 如下:


class Yaml
{
    public static function load($yaml)
    {
        if (function_exists('syck'))
            return syck_load($yaml);

        if (class_exists('spyc'))
            return Spyc::YAMLLoad($yaml);
    }

    public static function dump($var)
    {
        if (function_exists('syck'))
            return syck_dump($var);

        if (class_exists('spyc'))
            return Spyc::YAMLDump($var);
    }

這樣感覺會比較直覺一點, 直接用 yaml::load 或是 yaml::dump 感覺比較好, 而如果有 syck extension 就用 syck, 沒有在去用 spyc, 也剛好兩個都不叫 yaml XD

ok, 拿了 CodeIgniter 的 db 設定來作範例, 這個是 yaml

---
default:
  hostname: localhost
  username:
  password:
  database:
  dbdriver: mysql
  dbprefix:
  pconnect: true
  db_debug: true
  cache_on: false
  cachedir:
  char_set: utf8
  dbcollat: utf8_general_ci

這個是原本的 php 變數設定, 這個算是滿清楚的了, 更複雜的就…

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "";
$db['default']['password'] = "";
$db['default']['database'] = "";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";

最後, 有空應該還是要來測試一下, 用 yaml 來當設定檔, 跟用 php 變數來當設定檔, 到底會差多少好了。

January 29th, 2009 Programming Tags: , , ,

4 Responses to “用 YAML 來作設定檔”

  1. gslin says:

    不考慮用 JSON 嗎?

  2. tzangms says:

    有想過內, 只是用 json 來當設定檔的話, 好像沒 yaml 看起來那麼清楚

  3. [...] config class 參考 kohana 的 config 方式來實作, 搭配先前提到的用 yaml 來作設定檔, 來讀取 [...]

  4. [...] 3 用 YAML 來作設定檔 关键字: Tags: gmail, konana « 2007年的经典博客语录(犯贱报) [...]

Leave a Reply

Partners of Oceanic / 人生海海

jiwo sca wellmeet