Analyse un fichier de configuration

# parse_ini_file

(PHP 4, PHP 5, PHP 7, PHP 8)

parse_ini_file — Analyse un fichier de configuration

### Description

function parse_ini_file(string `$filename`, bool `$process_sections` = `false`, int `$scanner_mode` = `INI_SCANNER_NORMAL`): array|false

parse_ini_file() charge le fichier `filename` et retourne les configurations qui s'y trouvent sous forme d'un tableau associatif.

La structure des fichiers de configuration lus est similaire à celle de php.ini.

Avertissement

Cette fonction ne doit pas être utilisée avec des entrées non fiables, sauf si `scanner_mode` est `INI_SCANNER_RAW` car la sortie analysée pourrait contenir les valeurs de constantes sensibles, telles que des constantes contenant un mot de passe de base de données.

### Liste de paramètres

`filename`

  Le nom du fichier de configuration à analyser. Si un chemin relatif est utilisé, il est évalué relatif au dossier courant actuel, puis selon le include_path.

`process_sections`

  En passant le paramètre `process_sections` à `true`, le résultat sera un tableau multidimensionnel, incluant les noms des sections et les configurations. La valeur par défaut de ce paramètre est `false`

`scanner_mode`

  Peut être `INI_SCANNER_NORMAL` (défaut) ou `INI_SCANNER_RAW`. Si `INI_SCANNER_RAW` est fourni, alors les valeurs en option ne seront pas analysées.

  À parti de PHP 5.6.1 peut aussi être spécifié comme `INI_SCANNER_TYPED`. Dans ce mode les booléens, null et entiers sont préservés tant que possible. Les chaines de caractères `"true"`, `"on"` et `"yes"` sont converties vers `true`. `"false"`, `"off"`, `"no"` et `"none"` sont considérés comme `false`. `"null"` est converti en `null` dans ce mode. De plus toutes les chaines de caractères numériques sont converties en entier si possible.

### Valeurs de retour

La configuration est retournée sous la forme d'un tableau associatif en cas de succès, et `false` si une erreur survient.

### Exemples

Exemple #1 Contenu du fichier sample.ini

    ; Ceci est un fichier de configuration
    ; Les commentaires commencent par ';', comme dans php.ini

    [first_section]
    one = 1
    five = 5
    animal = BIRD

    [second_section]
    path = "/usr/local/bin"
    URL = "http://www.example.com/~username"

    [third_section]
    phpversion[] = "5.0"
    phpversion[] = "5.1"
    phpversion[] = "5.2"
    phpversion[] = "5.3"

    urls[svn] = "http://svn.php.net"
    urls[git] = "http://git.php.net"

Exemple #2 Exemple avec parse_ini_file()

Les constantes (mais pas les "constantes magiques" telles que `__FILE__`) peuvent aussi être utilisées dans le fichier .ini, ce qui fait que si l'on définit une constante avant d'exécuter parse_ini_file(), elle sera intégrée dans les résultats. Seules les valeurs de configuration sont évaluées, et la valeur doit juste être la constante. Par exemple :

    <?php

    define('BIRD', 'Dodo bird');

    // Analyse sans sections
    $ini_array = parse_ini_file("sample.ini");
    print_r($ini_array);

    // Analyse avec sections
    $ini_array = parse_ini_file("sample.ini", true);
    print_r($ini_array);

    ?>

Résultat de l'exemple ci-dessus est similaire à :

    Array
    (
        [one] => 1
        [five] => 5
        [animal] => Dodo bird
        [path] => /usr/local/bin
        [URL] => http://www.example.com/~username
        [phpversion] => Array
            (
                [0] => 5.0
                [1] => 5.1
                [2] => 5.2
                [3] => 5.3
            )

        [urls] => Array
            (
                [svn] => http://svn.php.net
                [git] => http://git.php.net
            )

    )
    Array
    (
        [first_section] => Array
            (
                [one] => 1
                [five] => 5
                [animal] => Dodo bird
            )

        [second_section] => Array
            (
                [path] => /usr/local/bin
                [URL] => http://www.example.com/~username
            )

        [third_section] => Array
            (
                [phpversion] => Array
                    (
                        [0] => 5.0
                        [1] => 5.1
                        [2] => 5.2
                        [3] => 5.3
                    )

                [urls] => Array
                    (
                        [svn] => http://svn.php.net
                        [git] => http://git.php.net
                    )

            )

    )

Exemple #3 parse_ini_file() pour analyser un fichier php.ini

    <?php
    // Une fonction simple pour comparer les résultats ci-dessous
    function yesno($expression)
    {
        return($expression ? 'Yes' : 'No');
    }

    // Lit le chemin du php.ini en utilisant php_ini_loaded_file()
    $ini_path = php_ini_loaded_file();

    // Analyse de php.ini
    $ini = parse_ini_file($ini_path);

    // Affichage et comparatif des valeurs. Il est à noter que get_cfg_var()
    // va donner les mêmes résultats entre les résultats analysés et chargés
    echo '(analysé) magic_quotes_gpc = ' . yesno($ini['magic_quotes_gpc']) . PHP_EOL;
    echo '(chargé ) magic_quotes_gpc = ' . yesno(get_cfg_var('magic_quotes_gpc')) . PHP_EOL;
    ?>

Résultat de l'exemple ci-dessus est similaire à :

    (analysé) magic_quotes_gpc = Yes
    (chargé ) magic_quotes_gpc = Yes

Exemple #4 Interpolation de Valeur

En plus d'évaluer les constantes, certains caractères ont une signification particulière dans une valeur ini. Additionnellement, les variables d'environnement et options de configuration définies précédemment (voir get_cfg_var()) peuvent être lues en utilisant la syntaxe `${}`.

    ; | est utilisé pour le OU bit à bit
    three = 2|3

    ; & est utilisé pour le ET bit à bit
    four = 6&5

    ; ^ est utilisé pour le OU exclusif bit à bit
    five = 3^6

    ; ~ est utilisé pour la négation bit à bit
    negative_two = ~1

    ; () est utilisé pour le regroupement
    seven = (8|7)&(6|5)

    ; Interpoler la variable d'environnement PATH
    path = ${PATH}

    ; Interpoler l'option de configuration 'memory_limit'
    configured_memory_limit = ${memory_limit}

Exemple #5 Échapper des Caractères

Certains caractères ont une signification particulière dans les chaînes à guillemets doubles et doivent être échappés en les préfixant d'un antislash. Tout d'abord, ce sont les guillemets double `"` comme le marqueur de frontière, et l'antislash `\` lui-même (si suivi d'un des caractères spéciaux) :

    quoted = "She said \"Exactly my point\"." ; Donne une chaîne contenant des guillemets.
    hint = "Use \\\" to escape double quote" ; Donne : Use \" to escape double quote

Il y a une exception pour les chemins Windows-esque : il est possible de ne pas échapper l'antislash traînant si la chaîne citée est directement suivie d'un retour à la ligne :

    save_path = "C:\Temp\"

Si l'on doit échapper un guillemet double suivi d'un retour à la ligne dans une valeur multiligne, il est possible d'utiliser la concaténation de valeur de la manière suivante (il y a une chaîne à guillemet double directement suivie d'une autre) :

    long_text = "Lorem \"ipsum\"""
     dolor" ; Donne : Lorem "ipsum"\n dolor

Un autre caractère avec une signification particulière est `$` (le signe dollar). Il doit être échappé s'il est suivi d'une accolade ouvrante :

    code = "\${test}"

L'échappement de caractères n'est pas supporté dans le mode `INI_SCANNER_RAW` (dans ce mode tous les caractères sont traités "tels quels").

Il est à noter que l'analyseur INI ne supporte pas les séquences d'échappement standard (`\n`, `\t`, etc.). Si nécessaire, le résultat de parse_ini_file() doit être post-procédé avec la fonction stripcslashes().

### Notes

> Note:

> Cette fonction n'a rien à voir avec le fichier php.ini. Ce dernier a déjà été traité lorsque l'on commence à exécuter le script. Cette fonction peut permettre de lire ses propres fichiers de configuration.

> Note:

> Si une valeur du fichier ini contient des données non-alphanumériques, il faut la protéger en la plaçant entre guillemets doubles (").

> Note: Il existe des mots réservés qui ne doivent pas être utilisés en tant que clés dans les fichiers ini. Cela inclut : `null`, `yes`, `no`, `true`, `false`, `on`, `off` et `none`. Les valeurs `null`, `off`, `no` et `false` donnent `""`, et les valeurs `on`, `yes` et `true` donnent `"1"`, à moins que le mode `INI_SCANNER_TYPED` ne soit utilisé. Les caractères `?{}|&~!()^"` ne doivent pas être utilisés n'importe où dans la clé et ont une signification spéciale dans la valeur.

> Note:

> Les entrées sans un signal égal seront ignorées. Par exemple, "foo" sera ignoré alors que "bar =" sera analysé et ajouté avec une valeur vide. Par exemple, MySQL a une option de configuration "no-auto-rehash" dans le fichier my.cnf qui ne prend pas de valeur, aussi, elle sera ignorée.

> Note:

> Les fichiers ini sont généralement traités comme des fichiers de texte brut par les serveurs web, et donc envoyés au navigateur si demandé. Ceci signifie que pour la sécurité soit les fichiers ini doivent être stockés en dehors de la racine docroot, soit reconfigurer le serveur web pour ne pas les servir. L'échec de faire l'une de ces mesures peut introduire un risque de sécurité.

### Voir aussi

- parse_ini_string() - Analyse une chaîne de configuration

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open