CakeFest 2024: The Official CakePHP Conference

yaml_parse_file

(PECL yaml >= 0.4.0)

yaml_parse_fileAnalyse un flux YAML depuis un fichier

Description

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

Convertit tout ou partie d'un document YAML provenant d'un fichier vers une variable PHP.

Liste de paramètres

filename

Chemin vers le fichier.

pos

Le document à extraire du flux (-1 pour tous les documents, 0 pour le premier, ...).

ndocs

Si ndocs est fourni, alors il est rempli avec le nombre de documents trouvés dans le flux.

callbacks

Analyseurs de contenu pour les nœuds YAML. Tableau associatif tag YAML => callable. Voir l'analyse des fonctions de rappel pour plus de détails.

Valeurs de retour

Retourne la valeur encodée de filename dans le type PHP approprié ou false si une erreur survient. Si pos vaut -1 un tableau sera retourné avec pour chaque valeur, un document trouvé dans le flux.

Notes

Avertissement

Le fait de traiter une entrée utilisateur non sécurisée avec yaml_parse_file() est dangereux si l'utilisation de unserialize() est activé pour les nœuds utilisant la balise !php/object. Ce comportement peut être désactivé en utilisant la configuration ini yaml.decode_php.

Voir aussi

add a note

User Contributed Notes 4 notes

up
21
Dan M
3 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
1
Arne L.
8 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
12 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
-10
DarckCrystale
5 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