BRE03

Utiliser les .env dans un projet PHP

Les contenus du cours BRE03 Web Dev Course © 2024 par Mari Doucet sont sous licence CC BY-NC-SA 4.0

Définition et Usage

Un fichier .env (abréviation de “environment”) est un fichier texte utilisé dans différents types de projets (web, applicatif, api) pour stocker des configurations d’environnement.

Exemples de variables d’environnement

Informations de Connexion à une Base de Données

DB_HOST=localhost
DB_USER=root
DB_PASS=password123
DB_NAME=mydatabase

Clés d’API

API_KEY=abc123xyz789

Avantages Clés

Sécurité :

Le fichier .env permet de stocker des informations sensibles telles que les mots de passe, les clés API, et autres données confidentielles, sans avoir à les versionner (utilisation du .gitignore), et donc sans risquer de les exposer au public.

Flexibilité

Les variables d’environnement permettent une certaine souplesse dans le développement, par exemple de changer des URLS d’API, de créer un mode debug, et le tout en ayant rien à changer dans le code source.

Maintenabilité

En séparant code et configuration cela permet au site ou à l’application de pouvoir être déployée plus facilement dans des environnements distincts. (Un serveur de Prod sur RedHat alors que le serveur de test est sur Debian par exemple).

Utilisation de la librairie PHP Dotenv

Création du fichier .env

Pour intégrer un fichier .env dans un projet il faut :

Exemple d’un fichier .env

DB_HOST=db.3wa.io
DB_PORT=3306
DB_NAME=prenomnom_phpj7
DB_USERNAME=votre_username
DB_PASSWORD=votre_password

Une fois le fichier existant, nous allons voir comment utiliser la librairie Dotenv pour avoir accès aux variables définie dans .env dans votre code PHP.

Installer PHP Dotenv via Composer

Composer est un outil de gestion des dépendances : il permet de récupérer/installer des versions précises de biliothèques extérieures à votre projet et tout composant nécessaire à leur bon fonctionnement.

Dans notre cas voici la commande à écrire dans votre terminal à la racine d’un projet pour récupérer la librairie PHP de Dotenv

composer require vlucas/phpdotenv

Vous trouverez ainsi tous les composants nécessaires au fonctionnement de la librairie PHP Dotenv dans un dossier ./vendor.

Exemple d’utilisation dans PHP

Utiliser une bibliothèque spécifique comme Dotenv pour PHP va permettre de lire le contenu du fichier .env et d’en charger ses variables dans votre application PHP de manière globale.

Exemple :

// Exemple d'utilisation des variables d'environnement dans le contexte d'une connexion à une base de données

require_once __DIR__ . '/vendor/autoload.php';

// Chargement des variables d'environnement
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();

// Utilisation des variables d'environnement
$host = $_ENV['DB_HOST'];
$port = $_ENV['DB_PORT'];
$user = $_ENV['DB_USERNAME'];
$password = $_ENV['DB_PASSWORD'];
$dbname = $_ENV['DB_NAME'];

$connexionString = "mysql:host=$host;port=$port;dbname=$dbname;charset=utf8";

$db = new PDO(
    $connexionString,
    $user,
    $password
);

Documentation complète de PHP Dotenv : https://github.com/vlucas/phpdotenv

Bonnes Pratiques

Ne jamais versionner le fichier

Pour des raisons de sécurité, il est crucial de ne pas versionner le fichier .env, vous pouvez donc directement l’ajouter dans votre .gitignore. Vous pouvez par contre versionner un .env.example qui contient simplement des valeurs d’exemple pour, si vous travaillez en groupe que chacun-e sache quoi mettre dans son .env.

Exemple de fichier gitignore

vendor/
.env
composer.lock

Utiliser des fichiers distincts pour différents environnements

Il est recommandé d’avoir des fichiers .env séparés pour les environnements de développement, de test et de production, contenant des variables appropriées à chaque contexte

Exercice pratique

Utilisez le mini-projet d’authentification de la journée sur les sessions, les cookies et les hash et transformez la connexion à la base de données en utilisant un .env.