parse_ini_string()
La fonction parse_ini_string() analyse une chaîne au format INI et retourne un tableau associatif contenant les valeurs de la configuration.
Qu'est-ce que la fonction parse_ini_string() ?
La fonction parse_ini_string() analyse une chaîne écrite au format INI de configuration et retourne son contenu sous forme de tableau associatif. C'est l'équivalent en mémoire de parse_ini_file() : au lieu de lire les paramètres depuis un fichier sur le disque, elle les lit depuis une chaîne déjà présente dans une variable.
C'est utile lorsque les données de configuration proviennent d'une source autre qu'un fichier local — une colonne de base de données, une réponse HTTP, une variable d'environnement, ou un here-doc intégré dans votre code. Le format INI lui-même est le même que celui utilisé par PHP pour php.ini : des paires key = value, des en-têtes optionnels [section], et des commentaires ;.
Cette page couvre la signature de la fonction, les sorties avec et sans sections, les trois modes de scanner, et les pièges les plus courants (mots réservés, caractères spéciaux et échecs d'analyse).
Syntaxe
parse_ini_string(
string $ini_string,
bool $process_sections = false,
int $scanner_mode = INI_SCANNER_NORMAL
): array|false| Paramètre | Description |
|---|---|
$ini_string | La chaîne au format INI à analyser. |
$process_sections | Si true, le tableau retourné est imbriqué par [section]. Par défaut à false (plat). |
$scanner_mode | L'un de INI_SCANNER_NORMAL, INI_SCANNER_RAW, ou INI_SCANNER_TYPED. |
La fonction retourne un tableau associatif en cas de succès, ou false en cas d'échec.
Exemple de base
Commencez avec une chaîne plate de paires key = value et lisez les valeurs par clé :
<?php
$config = parse_ini_string(
"; Example configuration string\n" .
"name = John Doe\n" .
"email = [email protected]\n" .
"phone = 555-555-5555"
);
echo $config['name']; // John Doe
echo $config['email']; // [email protected]
echo $config['phone']; // 555-555-5555La première ligne commençant par ; est un commentaire et est ignorée. Chaque autre ligne devient une entrée dans le tableau retourné, indexée par le nom situé à gauche du =.
Regrouper les valeurs par section
Les fichiers INI organisent souvent les paramètres connexes sous des en-têtes [section]. Passez true comme second argument pour conserver cette structure dans le résultat — chaque section devient un tableau imbriqué :
<?php
$ini = "[settings]\nname = John Doe\nemail = [email protected]";
$config = parse_ini_string($ini, true);
print_r($config);Sortie :
Array
(
[settings] => Array
(
[name] => John Doe
[email] => [email protected]
)
)Avec $process_sections à sa valeur par défaut false, l'en-tête [settings] est ignoré et vous obtenez un tableau plat contenant name et email.
Modes de scanner
Le troisième argument contrôle la façon dont les valeurs sont interprétées :
INI_SCANNER_NORMAL(par défaut) — les valeurs sont retournées sous forme de chaînes, et les constantes/mots spéciaux sont évalués.INI_SCANNER_RAW— les valeurs sont retournées exactement telles qu'écrites, sans interprétation. Utilisez ce mode pour préserver les chaînes littérales.INI_SCANNER_TYPED— les booléens, les nombres etnullsont convertis vers leurs types PHP natifs au lieu de chaînes.
INI_SCANNER_TYPED est le plus utile pour une vraie configuration, car il vous évite de caster manuellement les chaînes :
<?php
$ini = "debug = true\nretries = 3\ntimeout = 1.5";
$config = parse_ini_string($ini, false, INI_SCANNER_TYPED);
var_dump($config);Sortie :
array(3) {
["debug"]=>
bool(true)
["retries"]=>
int(3)
["timeout"]=>
float(1.5)
}En mode normal, ces mêmes valeurs seraient toutes des chaînes ("1" pour true, "3", "1.5").
Mots réservés et guillemets
Quelques caractères et mots ont une signification spéciale dans le format INI, faites donc attention à ces points :
- Les mots
true,false,on,off,yes,no,noneetnullsont interprétés comme des booléens/nullen mode typé et comme"1"/""en mode normal. Si vous avez besoin du texte littéral, encadrez la valeur entre guillemets ou utilisezINI_SCANNER_RAW. - Les caractères
?{}|&~!()^"sont réservés et ne doivent pas être utilisés en dehors d'une valeur entre guillemets. - Une valeur contenant des espaces ou des caractères spéciaux doit être entre guillemets :
path = "C:\Program Files".
Gérer les échecs d'analyse
parse_ini_string() retourne false si l'entrée ne peut pas être analysée, donc vérifiez le résultat avant de l'utiliser :
<?php
$config = parse_ini_string($_POST['config'] ?? '', true);
if ($config === false) {
echo 'Invalid configuration string.';
} else {
// safe to use $config here
print_r($config);
}Une valeur vide n'est pas un échec — name = produit simplement une chaîne vide pour cette clé. Les vrais échecs proviennent d'une syntaxe malformée, par exemple une valeur non entre guillemets qui utilise des caractères réservés.
Quand l'utiliser
Utilisez parse_ini_string() lorsque :
- Le texte de configuration est déjà en mémoire (chargé depuis une base de données, une API ou un flux) et non sur le disque.
- Vous souhaitez un format de configuration léger et sans dépendances que des non-développeurs peuvent modifier.
- Vous devez valider ou transformer le contenu INI avant de le persister dans un fichier.
Si la configuration se trouve dans un fichier réel, utilisez plutôt parse_ini_file() — il lit et analyse en une seule étape. Pour des structures de données plus complexes, envisagez JSON via json_decode().
Conclusion
parse_ini_string() convertit une chaîne au format INI en tableau PHP, avec un regroupement optionnel par sections et trois modes de scanner pour contrôler le typage des valeurs. Utilisez $process_sections pour préserver la structure [section], préférez INI_SCANNER_TYPED lorsque vous souhaitez de vrais booléens et des nombres, et vérifiez toujours un retour false lorsque l'entrée provient d'une source non fiable.