PHP 8.6.0 Beta 1 is available for testing

yaml_parse_file

(PECL yaml >= 0.4.0)

yaml_parse_fileРазбирает YAML-поток из файла

Описание

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

Конвертирует полностью или частично поток YAML-документов, читаемых из файла, в переменную PHP.

Список параметров

filename

Путь к файлу.

pos

Индекс документа для извлечения из потока (-1 для всех документов, 0 для первого документа, ...).

ndocs

Если ndocs передан, то он будет заполнен количеством документов, найденных в потоке.

callbacks

Обработчики содержимого для узлов YAML. Ассоциативный массив (array ), ключи которого являются тегами YAML, а значения callback-функциями (callable ), которые будут их обрабатывать. Более подробно этот механизм описан в разделе callback-функции разбора.

Возвращаемые значения

Функция возвращает значение, закодированное в пути filename, в соответствующем PHP-типе

В случае ошибки возвращается строка, содержащая сообщение об ошибке.

Если значение параметра pos равно -1, возвращается массив (array ) с одной записью для каждого документа, найденного в потоке.

Примечания

Внимание

Обработка ненадёжного пользовательского ввода функцией yaml_parse_file() опасна, если для узлов с тегом !php/object включено использование функции unserialize() . Такое поведение может быть запрещено через ini-настройку yaml.decode_php.

Смотрите также

  • yaml_parse() - Разбирает поток YAML
  • yaml_parse_url() - Разбирает YAML-поток по URL-адресу
  • yaml_emit() - Возвращает YAML-представление значения

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

Примечания пользователей 3 notes

up
27
Dan M
6 years ago
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!
up
2
Arne L.
11 years ago
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;
?>
up
-4
Jesse Donat
15 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.
+Добавить

AltStyle によって変換されたページ (->オリジナル) /