yaml_parse_file

(PECL yaml >= 0.4.0)

yaml_parse_fileAnaliza una secuencia de texto en formato YAML desde un fichero

Descripción

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

Convierte toda o parte de una secuencia de texto en YAML a una variable en PHP.

Parámetros

filename

Ruta del nombre del fichero.

pos

Documento YAML a extraer desde la secuencia de texto (-1 para analizar todos los documentos, 0 solo para el primer documento, etc).

ndocs

Si se facilita ndocs, se completará con el número de documentos encontrados en la secuencia de texto.

callbacks

Controlador de contenido para los nodos YAML. Es un array associativo de etiquetas YAML => asociando sus callback correspondientes. Ver Analizar callbacks para más información.

Valores devueltos

Devuelve el valor codificado de input en el formato apropiado de PHP o false en caso de error. Si el valor de pos es -1 devolverá un array con una entrada por cada documento encontrado en el texto.

Notas

Advertencia

El procesamiento de las entradas de los usuarios no confiables con yaml_parse_file() es peligroso si el uso de unserialize() está habilitado para los nodos usando la etiqueta !php/object. Este comportamiento puede ser desactivado por el uso de el ajuste ini yaml.decode_php.

Ver también

add a note add a note

User Contributed Notes 4 notes

up
15
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
0
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
-3
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.
up
-9
DarckCrystale
6 years ago
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
To Top