---
title: "Configuration et paramètres"
description: "Comment Nibiru charge la configuration à partir des fichiers INI spécifiques à l'environnement."
---

La couche de configuration de Nibiru est intentionnellement simple : elle analyse un seul fichier `settings.<env>.ini` au démarrage, l'expose via un singleton, et laisse aux modules ajouter leurs propres INIs à travers le [Registry](/core/registry/).

## Sélection d'environnement

La variable d'environnement `APPLICATION_ENV` sélectionne le fichier à charger :

| `APPLICATION_ENV` | Fichier chargé |
|---|---|
| `développement` (par défaut) | `application/settings/config/settings.development.ini` |
| `pré-production` | `application/settings/config/settings.staging.ini` |
| `production` | `application/settings/config/settings.production.ini` |
```bash
export APPLICATION_ENV=production
./nibiru -mi production
```
Si `APPLICATION_ENV` n'est pas défini, Nibiru par défaut à `développement`.

## Sections

Un fichier `settings.<env>.ini` typique :
```ini
[ENGINE]
templates    = "/../../application/view/templates/"
templates_c  = "/../../application/view/templates_c/"
cache        = "/../../application/view/cache/"
config_dir   = "/../../application/view/configs/"
caching      = false
debug        = true
error.controller = "error"

[AUTOLOADER]
iface.pos[]  = "users"
iface.pos[]  = "cms"
class.pos[]  = "users"
class.pos[]  = "cms"

[SETTINGS]
page.url            = "https://my-app.local"
navigation          = "/../../application/settings/config/navigation/main.json"
modules.path        = "/../../application/module/"
entries.per.page    = 25
smarty.css[]        = "/public/css/app.css"
smarty.js[]         = "/public/js/app.js"
timezone            = "Europe/Vienna"

[DATABASE]
driver    = "pdo"
hostname  = "localhost"
port      = 3306
username  = "nibiru"
password  = "secret"
basename  = "nibiru_dev"
encoding  = "utf8mb4"
is.active = true

[SECURITY]
password_hash = "change-me-at-once"

[GENERATOR]
database          = true
database.overwrite = true

[EMAIL]
host       = "smtp.example.com"
port       = 587
encryption = "tls"
username   = "noreply@example.com"
password   = "smtp-secret"
from       = "Nibiru <noreply@example.com>"

[NIBIRU_ROUTING]
; optional regex routes — see /core/routing/

[NIBIRU_SECURITY]
password_hash = "another-salt-for-AES_DECRYPT"
```
## Lecture des configurations
```php
$cfg = \Nibiru\Config::getInstance()->getConfig();
$cfg['DATABASE']['driver'];       // 'pdo'
$cfg['SETTINGS']['page.url'];     // 'https://my-app.local'
```
Pour les configurations profondément imbriquées, utilisez les constantes typées de l'interface View :
```php
$cfg[\Nibiru\View::NIBIRU_SETTINGS]['smarty.css'];   // ['/public/css/app.css']
```
## Configurations des modules

Chaque module situé sous `application/module/<nom>/settings/` peut posséder ses propres fichiers INI. Le Registre les détecte automatiquement et les expose via :
```php
$users = \Nibiru\Registry::getInstance()->loadModuleConfigByName('users');
$users->session_lifetime;        // from [USERS] section in users.ini
```
Le Registre préfère `<module>.<env>.ini` par rapport à `<module>.ini`, donc vous obtenez des remplacements par environnement gratuitement.

## Secrets

Les fichiers INI sont du *texte brut*. Deux options sûres pour la production :

### A. Superposition d'environnement

Gardez `settings.production.ini` dans le contrôle de version avec des espaces réservés, et injectez les valeurs réelles à partir des variables d'environnement au moment de l'exécution :
```ini
[DATABASE]
password = "${DB_PASSWORD}"
```
Puis développez-les dans votre conteneur/CI :
```bash
envsubst < settings.production.ini.tpl > settings.production.ini
```
### B. Configuration hors arbre

Gardez `settings.production.ini` à l'extérieur du dépôt et créez un lien symbolique lors du déploiement :
```bash
ln -s /etc/nibiru/settings.production.ini \
      application/settings/config/settings.production.ini
```
Le framework n'importe pas où se trouve le fichier, du moment que `parse_ini_file` peut le lire.

## Rechargement des sémantiques

La configuration est lue **une seule fois** au démarrage, dans la variable statique `Settings`. Les modifications du fichier INI nécessitent un cycle de requête pour prendre effet (ou, pour les scripts à long terme, un appel explicite à `Settings::setConfig(\Nibiru\Config::getEnv())`).

## Tracas courantes

- **Chemin menant `/../../`.** Les chemins INI du framework sont *relatifs au répertoire du framework*. Ils doivent commencer par `/../../` pour échapper à la racine de votre projet. Oui, cela semble bizarre ; oui, cela fonctionne.
- **Analyse booléenne.** `parse_ini_file` est permissif — `true`, `on`, `1` deviennent tous `1`; `false`, `off`, `0`, `""` deviennent `0`. Utilisez des chaînes de trois guillemets si vous avez vraiment besoin d'une littérale `"true"`.
- **Valeurs de tableau.** Utilisez la syntaxe `[]` (`smarty.css[] = …`) — Nibiru repose sur le fait que ces éléments soient des tableaux.
