phpday 2025 - Call For Papers

yaml_parse_file

(PECL yaml >= 0.4.0)

yaml_parse_fileAnalisa um fluxo YAML de um arquivo

Descrição

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

Converte todo ou parte de um fluxo de documentos YAML lido de um arquivo em uma variável PHP.

Parâmetros

filename

Caminho para o arquivo.

pos

Documento a ser extraído do fluxo (-1 para todos os documentos, 0 para o primeiro documento, ...).

ndocs

Se ndocs for fornecido, será preenchido com o número de documentos encontrados no fluxo.

callbacks

Manipuladores de conteúdo para nós YAML. Um array associativo para mapeamento de etiqueta => callable. Consulte funções de análise para mais detalhes.

Valor Retornado

Retorna o valor codificado em filename no tipo PHP apropriado ou false em caso de falha. Se pos for -1, um array será retornado com uma entrada para cada documento encontrado no fluxo.

Notas

Aviso

Processar entradas não confiáveis de usuários ​​com yaml_parse_file() é perigoso se o uso de unserialize() estiver habilitado para nós que usam a etiqueta !php/object. Este comportamento pode ser desativado usando a configuração INI yaml.decode_php.

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês) 3 notes

up
22
Dan M
4 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.
9 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
-5
Jesse Donat
13 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