PHPでYAMLにアクセスする

PHPでYAMLにアクセスしたい場面が出てきたので、その方法を調べてみました。

1.Spycを使う

PHPで書かれたYAMLパーサーとして、「Spyc」があります。
これを使うのが簡単だと思います。

1-1.Spycのダウンロードとインストール

まず、Spycのサイトからコードをダウンロードします。
ダウンロードしたZipファイルを解凍すると、「spyc.php」等のファイルと、いくつかのフォルダができます。
これらのうち、「spyc.php」ファイルのみサーバーにアップロードします。

そして、Spycを使いたいPHPのソースコードに、以下のようなrequire_once文を入れて、spyc.phpを組み込みます。

require_once('パス/spyc.php');

1-2.YAMLを読み込む

ファイルからYAMLを読み込んで、PHPのオブジェクトに変換するには、Spyc::YAMLLoadという関数を使います。

$obj = Spyc::YAMLLoad(YAMLファイルのパス);

また、YAMLの文字列をPHPのオブジェクトに変換するには、Spyc::YAMLLoadStringという関数を使います。

$obj = Spyc::YAMLLoadString(文字列);

1-3.YAMLを出力する

逆に、PHPのオブジェクトをYAMLの文字列に変換するには、Spyc::YAMLDumpという関数を使います。

$yaml_string = Spyc::YAMLDump(オブジェクト);

2.yaml拡張モジュールを使う

PECLで拡張モジュールをインストールできる環境なら、yaml拡張モジュールを使うと良いでしょう。
C言語で作られていますので、Spycより高速に動作することが期待できます。

2-1.準備

yaml拡張モジュールを使うには、LibYAMLが必要になります。
あらかじめ、LibYAMLをインストールしておきます。

例えば、Fedoraだと以下のコマンドでインストールできます。

sudo yum install libyaml
sudo yum install libyaml-devel

2-2.yaml拡張モジュールのインストール

次に、以下のコマンドで、yaml拡張モジュールをインストールします。

sudo pecl install YAML

インストール後、php.iniファイルに「extension=yaml.so」の行を加えて、yaml拡張モジュールを組み込むようにします。
また、Apacheでモジュール版PHPを使っている場合は、Apacheを再起動します。

2-3.YAMLを読み込む

ファイルからYAMLを読み込んで、PHPのオブジェクトに変換するには、yaml_parse_fileという関数を使います。

$obj = yaml_parse_file(YAMLファイルのパス);

また、YAMLの文字列をPHPのオブジェクトに変換するには、yaml_parseという関数を使います。

$obj = yaml_parse(文字列);

2-4.YAMLを出力する

PHPのオブジェクトをYAMLの文字列に変換するには、yaml_emitという関数を使います。

$yaml_string = yaml_emit(オブジェクト);

さらに、変換後の文字列をファイルに保存したい場合は、yaml_emit_fileという関数を使います。

yaml_emit_file(ファイル名, オブジェクト);