yaml_parse_file

(PECL yaml >= 0.4.0)

yaml_parse_fileファイルからの YAML ストリームをパースする

説明

yaml_parse_file(
    string $filename,
    int $pos = 0,
    int &$ndocs = ?,
    array $callbacks = null
): mixed

指定したファイルから読み込んだ YAML ドキュメントストリーム全体あるいはその一部を、PHP の変数に変換します。

パラメータ

filename

ファイルへのパス。

pos

ストリームから取り出すドキュメント (-1 はすべてのドキュメント、0 は最初のドキュメント、...)。

ndocs

ndocs を渡すと、 ストリーム内で見つかったドキュメントの数がそこに格納されます。

callbacks

YAML ノードのコンテンツハンドラ。 YAML タグ => callable 形式の連想配列となります。 詳細はパースコールバック を参照ください。

戻り値

filename にある情報を、 適切な PHP の型に変換した結果を返します。 失敗した場合に false を返します。 pos-1 の場合は配列を返します。 配列の各要素が、ストリーム内で見つかった個々のドキュメントとなります。

注意

警告

!php/object タグを使ったノードの unserialize() を有効にしている場合に、 ユーザーからの信頼できない入力を yaml_parse_file() で処理するのは危険です。 この挙動を無効にするには、ini 設定の yaml.decode_php を利用します。

参考

add a note

User Contributed Notes 3 notes

up
22
Dan M
5 years ago
Be aware that when parsing yaml an unquoted Y value will become a boolean trueThis may be desired or undesired behavior depending on context- chr_name: X // becomes string X- chr_name: Y // becomes boolean true[ [chr_name => X], [chr_name => true],]You definitely don't want chromosome Y becoming chromosome 1 (true) as happened to me, so heads up!
up
2
Arne L.
10 years ago
As Jesse Donat mentioned the type will be infered automatically. To enforce some type you can use the callback facility like this:<?phpfunction cb_yaml_date($value, $tag, $flags) {    return new DateTime($value);}$yaml = <<<YAMLevent1:  name: My Event  date: !date 25.05.2001YAML;$ndocs = 0;$data = yaml_parse($yaml, 0, $ndocs, array('!date' => 'cb_yaml_date'));print_r($data);?>The above example will output something similar to:    Array    (        [event1] => Array            (                [name] => My Event                [date] => DateTime Object                    (                        [date] => 2001-05-25 00:00:00                        [timezone_type] => 3                        [timezone] => Europe/Berlin                    )                )        )BTW if you want to have large numbers you are probably using BC Math. Thus, you simple enclose your number in quotes:<?php$yaml = <<<YAMLlargenumber: '14695760472279668267313200104308'YAML;?>
up
-5
Jesse Donat
14 years ago
This is entirely dependent on type detection - as far as I can find there is no way to force a type and for instance when you have a very long integer as a value - in my case 1313035348823 it gets limited to 2147483647 - PHP's max integer.
To Top