yaml_parse_file
(PECL yaml >= 0.4.0)
yaml_parse_file — Parse a YAML stream from a file
说明
Convert all or part of a YAML document stream read from a file to a PHP variable.
参数
-
filename
-
Path to the file.
-
pos
-
Document to extract from stream (
-1
for all documents,0
for first document, ...). -
ndocs
-
If
ndocs
is provided, then it is filled with the number of documents found in stream. -
callbacks
-
Content handlers for YAML nodes. Associative array of YAML tag => callable mappings. See parse callbacks for more details.
返回值
Returns the value encoded in input
in appropriate
PHP type 或者在失败时返回 false
. If pos
is -1
an
array will be returned with one entry for each document found
in the stream.
注释
Processing untrusted user input with yaml_parse_file()
is dangerous if the use of unserialize() is enabled for
nodes using the !php/object
tag. This behavior can be
disabled by using the yaml.decode_php
ini setting.
参见
- yaml_parse() - Parse a YAML stream
- yaml_parse_url() - Parse a Yaml stream from a URL
- yaml_emit() - Returns the YAML representation of a value

User Contributed Notes 4 notes
Be aware that when parsing yaml an unquoted Y value will become a boolean true
This 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!
As Jesse Donat mentioned the type will be infered automatically. To enforce some type you can use the callback facility like this:
<?php
function cb_yaml_date($value, $tag, $flags) {
return new DateTime($value);
}
$yaml = <<<YAML
event1:
name: My Event
date: !date 25.05.2001
YAML;
$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 = <<<YAML
largenumber: '14695760472279668267313200104308'
YAML;
?>
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.
When trying to read an empty file, yaml_parse_file() throws a warning:
PHP Warning: yaml_parse_file(): end of stream reached without finding document 0
备份地址:http://www.lvesu.com/blog/php/function.yaml-parse-file.php