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

すたらブログ

文系Webプログラマの備忘録

Windows: XAMPPのPHPでYAMLを扱う

XAMPP PHP

Windowsの場合はDLLを設置して"php.ini"に追記するだけで使えるようです。
簡単ですね (*´∀`*)

環境

DLLの入手

下記からWindows用のDLLを入手します。

私の場合は"5.5 Thread Safe (TS) x86"をダウンロードしました。

私のPCは64ビットのはずなのに、なぜか"5.5 Thread Safe (TS) x64"では動作しませんでした。
下記のような警告が出てしまいます。

なお、マルチスレッドに対応しているApache2系は"Thread Safe"を選べばいいそうです。

DLLの設置

解凍したフォルダの中にはDLLが2つ入っています。
それぞれ適切な場所に設置します。

DLL 設置場所
php_yaml.dll C:\xampp\php\ext
yaml.dll C:\xampp\php (パスが通っている)

"yaml.dll"は、WindowsがDLLを認識してくれる場所ならどこでもいいようです。
私は、他のXAMPP用のDLLも設置されている上記の場所にしました。

"php.ini"に追記

わかりやすいように、拡張モジュールを設定している箇所に追記します。

php.ini
extension=php_yaml.dll

その後、Apacheを再起動します。

確認

コマンドプロンプト
php -i | findstr /N /I "yaml"
759:yaml
761:LibYAML Support => enabled
763:LibYAML Version => 0.1.4
766:yaml.decode_binary => 0 => 0
767:yaml.decode_timestamp => 0 => 0
768:yaml.output_canonical => 0 => 0
769:yaml.output_indent => 2 => 2
770:yaml.output_width => 80 => 80
phpinfo()

使ってみた

test.yml
# 連想配列
foo: FOO
bar: BAR

# 配列を持つ連想配列
baz:
  - BAZ1
  - BAZ2
  - BAZ3

# 多次元連想配列
あにゃまる探偵キルミンずぅ 声優:
  御子神 リコ: 悠木碧
  御子神 リム: 佐藤聡美
  御子神 ナギサ: 安済知佳
index.php
<?php
$arr = yaml_parse_file('test.yml');

echo '<pre>';
print_r($arr);
echo '</pre>';
?>
結果
Array
(
    [foo] => FOO
    [bar] => BAR
    [baz] => Array
        (
            [0] => BAZ1
            [1] => BAZ2
            [2] => BAZ3
        )

    [あにゃまる探偵キルミンずぅ 声優] => Array
        (
            [御子神 リコ] => 悠木碧
            [御子神 リム] => 佐藤聡美
            [御子神 ナギサ] => 安済知佳
        )

)

さすがにマルチバイト文字列はダブルクオートで囲まないとエラーになるかと思いきや、問題なく処理してくれました。
JSONよりも読みやすいですね。