(PHP 4, PHP 5, PHP 7, PHP 8)
parse_ini_file — Analyse un fichier de configuration
$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.
filenameLe nom du fichier de configuration à analyser. Si un chemin relatif est utilisé, il est évalué relatif au dossier courrant actuel, puis selon le include_path.
process_sections
       En passant le paramètre process_sections
       à true, vous obtiendrez
       un tableau multidimensionnel avec les noms des sections.
       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.
   La configuration est retournée sous la forme d'un tableau associatif
   en cas de succès, et false si une erreur survient.
  
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" tel que __FILE__) peuvent aussi
     être utilisées dans le fichier .ini, ce qui fait que si vous définissez
     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. Notez 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'environment et options de configuration
     définies précédemment (voir get_cfg_var()) peuvent être
     lu en utilisant la syntaxe ${}.
    
; | is used for bitwise OR
three = 2|3
; & is used for bitwise AND
four = 6&5
; ^ is used for bitwise XOR
five = 3^6
; ~ is used for bitwise negate
negative_two = ~1
; () is used for grouping
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é 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 suivit d'un des caractères spéciaux) :
    
quoted = "She said \"Exactly my point\"." ; Results in a string with quote marks in it. hint = "Use \\\" to escape double quote" ; Results in: 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é est directement suivit d'un retour à la ligne :
save_path = "C:\Temp\"
Si l'on doit échapper une guillemet double suivit 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 suivit d'une autre) :
long_text = "Lorem \"ipsum\""" dolor" ; Results in: Lorem "ipsum"\n dolor
     Un autre caractère avec une signification particulière est $ (le signe dollar).
     Il doit être échappé s'il est suivit 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é "tel quel").
    
     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().
    
Note:
Cette fonction n'a rien a voir avec le fichier php.ini. Ce dernier a déjà été traité lorsque vous commencez à exécuter votre script. Cette fonction peut vous permettre de lire vos 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,onetoff. Les valeursnull,off,noetfalsedonnent "" (chaîne vide). Les valeurson,yesettruedonnent "1", à moins que le modeINI_SCANNER_TYPEDne 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é comme des fichiers de texte brut par les servers web, et donc envoyé 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é.