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
(PECL yaml >= 0.4.0)
yaml_parse_file — Parse a YAML stream from a file
$filename
[, int $pos
= 0
[, int &$ndocs
[, array $callbacks
= NULL
]]] ) : mixedConvert 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.
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
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.