|
| 1 | +# PHP-DotEnv |
| 2 | + |
| 3 | +PHP-DotEnv is a lightweight and robust PHP library designed to simplify the management of environment variables in your PHP applications. It parses a `.env` file and loads the variables into `getenv()`, `$_ENV`, and `$_SERVER`. |
| 4 | + |
| 5 | +It comes with a powerful processor system that automatically converts values (booleans, nulls, numbers) and allows you to define your own custom processors for specific needs. |
| 6 | + |
| 7 | +--- |
| 8 | + |
| 9 | +## English Documentation |
| 10 | + |
| 11 | +### Installation |
| 12 | + |
| 13 | +Requires PHP 7.4 or higher. |
| 14 | + |
| 15 | +Install via Composer: |
| 16 | + |
| 17 | +```bash |
| 18 | +composer require michel/dotenv |
| 19 | +``` |
| 20 | + |
| 21 | +### Basic Usage |
| 22 | + |
| 23 | +1. **Create a `.env` file** in your project root: |
| 24 | + |
| 25 | + ```dotenv |
| 26 | + APP_ENV=dev |
| 27 | + DATABASE_URL="mysql:host=localhost;dbname=test" |
| 28 | + DEBUG=true |
| 29 | + CACHE_TTL=3600 |
| 30 | + API_KEY=null |
| 31 | + # This is a comment |
| 32 | + ``` |
| 33 | +
|
| 34 | +2. **Load the variables** in your PHP entry point (e.g., `index.php`): |
| 35 | +
|
| 36 | + ```php |
| 37 | + <?php |
| 38 | + require 'vendor/autoload.php'; |
| 39 | +
|
| 40 | + use Michel\Env\DotEnv; |
| 41 | +
|
| 42 | + $envFile = __DIR__ . '/.env'; |
| 43 | +
|
| 44 | + // Load environment variables |
| 45 | + (new DotEnv($envFile))->load(); |
| 46 | +
|
| 47 | + // Access variables |
| 48 | + var_dump(getenv('APP_ENV')); // string(3) "dev" |
| 49 | + var_dump($_ENV['DEBUG']); // bool(true) |
| 50 | + ``` |
| 51 | +
|
| 52 | +### Features |
| 53 | +
|
| 54 | +#### 1. Automatic Type Conversion (Default Processors) |
| 55 | +PHP-DotEnv automatically processes values using default processors: |
| 56 | +
|
| 57 | +- **BooleanProcessor**: Converts `true` and `false` (case-insensitive) to PHP `bool`. |
| 58 | +- **NullProcessor**: Converts `null` (case-insensitive) to PHP `null`. |
| 59 | +- **NumberProcessor**: Converts numeric strings to `int` or `float`. |
| 60 | +- **QuotedProcessor**: Removes surrounding double quotes `"` or single quotes `'` from strings. |
| 61 | +
|
| 62 | +#### 2. Comments |
| 63 | +Lines starting with `#` are treated as comments and ignored. |
| 64 | +
|
| 65 | +#### 3. Trimming |
| 66 | +Keys and values are automatically trimmed of whitespace. |
| 67 | +
|
| 68 | +### Advanced Usage: Custom Processors |
| 69 | +
|
| 70 | +You can extend the functionality by creating custom processors. A processor must extend `Michel\Env\Processor\AbstractProcessor`. |
| 71 | +
|
| 72 | +#### Creating a Custom Processor |
| 73 | +
|
| 74 | +Example: A processor that converts comma-separated strings into arrays. |
| 75 | +
|
| 76 | +```php |
| 77 | +namespace App\Processor; |
| 78 | +
|
| 79 | +use Michel\Env\Processor\AbstractProcessor; |
| 80 | +
|
| 81 | +class ArrayProcessor extends AbstractProcessor |
| 82 | +{ |
| 83 | + public function canBeProcessed(): bool |
| 84 | + { |
| 85 | + // Process only if value contains a comma |
| 86 | + return strpos($this->value, ',') !== false; |
| 87 | + } |
| 88 | +
|
| 89 | + public function execute() |
| 90 | + { |
| 91 | + return array_map('trim', explode(',', $this->value)); |
| 92 | + } |
| 93 | +} |
| 94 | +``` |
| 95 | + |
| 96 | +#### Registering Custom Processors |
| 97 | + |
| 98 | +Pass an array of processor class names to the `DotEnv` constructor. |
| 99 | +**Note:** When you pass custom processors, you must also include the default ones if you still want them to run. |
| 100 | + |
| 101 | +```php |
| 102 | +use Michel\Env\DotEnv; |
| 103 | +use Michel\Env\Processor\BooleanProcessor; |
| 104 | +use Michel\Env\Processor\NullProcessor; |
| 105 | +use Michel\Env\Processor\NumberProcessor; |
| 106 | +use Michel\Env\Processor\QuotedProcessor; |
| 107 | +use App\Processor\ArrayProcessor; |
| 108 | + |
| 109 | +$processors = [ |
| 110 | + BooleanProcessor::class, |
| 111 | + NullProcessor::class, |
| 112 | + NumberProcessor::class, |
| 113 | + QuotedProcessor::class, |
| 114 | + ArrayProcessor::class // Your custom processor |
| 115 | +]; |
| 116 | + |
| 117 | +(new DotEnv(__DIR__ . '/.env', $processors))->load(); |
| 118 | +``` |
| 119 | + |
| 120 | +--- |
| 121 | + |
| 122 | +## 🇫🇷 Documentation Française |
| 123 | + |
| 124 | +### Introduction |
| 125 | + |
| 126 | +PHP-DotEnv est une bibliothèque PHP légère conçue pour simplifier la gestion des variables d'environnement dans vos applications PHP. Elle analyse un fichier `.env` et charge les variables dans `getenv()`, `$_ENV` et `$_SERVER`. |
| 127 | + |
| 128 | +Elle intègre un système de processeurs qui convertit automatiquement les valeurs (booléens, null, nombres) et vous permet de définir vos propres processeurs personnalisés. |
| 129 | + |
| 130 | +### Installation |
| 131 | + |
| 132 | +Nécessite PHP 7.4 ou supérieur. |
| 133 | + |
| 134 | +Installez via Composer : |
| 135 | + |
| 136 | +```bash |
| 137 | +composer require michel/dotenv |
| 138 | +``` |
| 139 | + |
| 140 | +### Utilisation de Base |
| 141 | + |
| 142 | +1. **Créez un fichier `.env`** à la racine de votre projet : |
| 143 | + |
| 144 | + ```dotenv |
| 145 | + APP_ENV=dev |
| 146 | + DATABASE_URL="mysql:host=localhost;dbname=test" |
| 147 | + DEBUG=true |
| 148 | + CACHE_TTL=3600 |
| 149 | + API_KEY=null |
| 150 | + # Ceci est un commentaire |
| 151 | + ``` |
| 152 | +
|
| 153 | +2. **Chargez les variables** dans votre point d'entrée PHP (ex: `index.php`) : |
| 154 | +
|
| 155 | + ```php |
| 156 | + <?php |
| 157 | + require 'vendor/autoload.php'; |
| 158 | +
|
| 159 | + use Michel\Env\DotEnv; |
| 160 | +
|
| 161 | + $envFile = __DIR__ . '/.env'; |
| 162 | +
|
| 163 | + // Charger les variables d'environnement |
| 164 | + (new DotEnv($envFile))->load(); |
| 165 | +
|
| 166 | + // Accéder aux variables |
| 167 | + var_dump(getenv('APP_ENV')); // string(3) "dev" |
| 168 | + var_dump($_ENV['DEBUG']); // bool(true) |
| 169 | + ``` |
| 170 | +
|
| 171 | +### Fonctionnalités |
| 172 | +
|
| 173 | +#### 1. Conversion Automatique des Types (Processeurs par défaut) |
| 174 | +PHP-DotEnv traite automatiquement les valeurs à l'aide de processeurs par défaut : |
| 175 | +
|
| 176 | +- **BooleanProcessor** : Convertit `true` et `false` (insensible à la casse) en `bool` PHP. |
| 177 | +- **NullProcessor** : Convertit `null` (insensible à la casse) en `null` PHP. |
| 178 | +- **NumberProcessor** : Convertit les chaînes numériques en `int` ou `float`. |
| 179 | +- **QuotedProcessor** : Supprime les guillemets doubles `"` ou simples `'` entourant les chaînes. |
| 180 | +
|
| 181 | +#### 2. Commentaires |
| 182 | +Les lignes commençant par `#` sont traitées comme des commentaires et ignorées. |
| 183 | +
|
| 184 | +#### 3. Nettoyage (Trimming) |
| 185 | +Les espaces autour des clés et des valeurs sont automatiquement supprimés. |
| 186 | +
|
| 187 | +### Utilisation Avancée : Processeurs Personnalisés |
| 188 | +
|
| 189 | +Vous pouvez étendre les fonctionnalités en créant des processeurs personnalisés. Un processeur doit étendre `Michel\Env\Processor\AbstractProcessor`. |
| 190 | +
|
| 191 | +#### Créer un Processeur Personnalisé |
| 192 | +
|
| 193 | +Exemple : Un processeur qui convertit les chaînes séparées par des virgules en tableaux. |
| 194 | +
|
| 195 | +```php |
| 196 | +namespace App\Processor; |
| 197 | +
|
| 198 | +use Michel\Env\Processor\AbstractProcessor; |
| 199 | +
|
| 200 | +class ArrayProcessor extends AbstractProcessor |
| 201 | +{ |
| 202 | + public function canBeProcessed(): bool |
| 203 | + { |
| 204 | + // Traiter uniquement si la valeur contient une virgule |
| 205 | + return strpos($this->value, ',') !== false; |
| 206 | + } |
| 207 | +
|
| 208 | + public function execute() |
| 209 | + { |
| 210 | + return array_map('trim', explode(',', $this->value)); |
| 211 | + } |
| 212 | +} |
| 213 | +``` |
| 214 | + |
| 215 | +#### Enregistrer les Processeurs Personnalisés |
| 216 | + |
| 217 | +Passez un tableau de noms de classes de processeurs au constructeur de `DotEnv`. |
| 218 | +**Note :** Lorsque vous passez des processeurs personnalisés, vous devez également inclure ceux par défaut si vous souhaitez qu'ils continuent de fonctionner. |
| 219 | + |
| 220 | +```php |
| 221 | +use Michel\Env\DotEnv; |
| 222 | +use Michel\Env\Processor\BooleanProcessor; |
| 223 | +use Michel\Env\Processor\NullProcessor; |
| 224 | +use Michel\Env\Processor\NumberProcessor; |
| 225 | +use Michel\Env\Processor\QuotedProcessor; |
| 226 | +use App\Processor\ArrayProcessor; |
| 227 | + |
| 228 | +$processors = [ |
| 229 | + BooleanProcessor::class, |
| 230 | + NullProcessor::class, |
| 231 | + NumberProcessor::class, |
| 232 | + QuotedProcessor::class, |
| 233 | + ArrayProcessor::class // Votre processeur personnalisé |
| 234 | +]; |
| 235 | + |
| 236 | +(new DotEnv(__DIR__ . '/.env', $processors))->load(); |
| 237 | +``` |
0 commit comments