すたらブログ

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

Windows: XAMPPのPHPでYAMLを扱う

最終更新:

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

環境

DLLの入手

下記からWindows用のDLLを入手します。
自機のPHPが対応している中で最新のバージョンのDLLを選べばいいと思います。

🔗 PECL :: Package :: yaml

f:id:sutara_lumpur:20170808135807p:plain

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

f:id:sutara_lumpur:20170808135857p:plain

x86かx64か、TSかNTSかを確認するには、phpinfo()で下記の項目を見てください。

f:id:sutara_lumpur:20170808140258p:plain

TS、NTSの違いについては下記を。

🔗 ふぁいんどぱわー 調べる人の冒険!(チラシの裏よりチョット上) PHP のNon Thread Safe とThread Safe の違い
🔗 【php】Thread Safe と Non Thread Safe どっちを使ったらいい? at softelメモ

DLLの設置

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

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

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

🔗 Windows が使用する DLL 検索パス

php.iniに追記

ファイルの末尾に追加します。

📄 C:\xampp\php\php.ini

extension=php_yaml.dll

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

確認

💻 PowerShell

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よりも読みやすいですね。