Skip to content

Commit 9cb5c84

Browse files
committed
Initial release of php-dotenv
0 parents  commit 9cb5c84

16 files changed

Lines changed: 848 additions & 0 deletions

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
/vendor/
2+
/.idea/
3+
composer.lock

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2021 F. Michel
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 237 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,237 @@
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+
```

composer.json

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"name": "michel/dotenv",
3+
"description": "PHP-DotEnv is a lightweight PHP library designed to simplify the management of environment variables in your PHP applications.",
4+
"type": "library",
5+
"license": "MIT",
6+
"authors": [
7+
{
8+
"name": "F. Michel"
9+
}
10+
],
11+
"autoload": {
12+
"psr-4": {
13+
"Michel\\Env\\": "src",
14+
"Test\\Michel\\Env\\": "tests"
15+
}
16+
},
17+
"require": {
18+
"php": ">=7.4"
19+
},
20+
"minimum-stability": "alpha",
21+
"require-dev": {
22+
"michel/unitester": "^1.0.0"
23+
}
24+
}

0 commit comments

Comments
 (0)