El uso de archivos .env es una práctica recomendada para gestionar configuraciones en proyectos PHP, separando la lógica de negocio de parámetros específicos del entorno. En este artículo, te mostraré cómo implementar un sistema para cargar configuraciones desde un archivo .env en PHP puro, manejando entornos de desarrollo y producción, con un solo archivo que nunca se versionará en Git.
Un archivo .env es un archivo de texto plano que contiene pares clave-valor, utilizado para almacenar configuraciones específicas de un entorno, como credenciales de base de datos, modos de depuración, claves API, entre otros. Este archivo permite manejar configuraciones sensibles sin exponerlas en el código fuente o el repositorio.
A continuación, te muestro cómo leer un archivo .env y cargar sus valores en un proyecto PHP. La solución incluye detección del entorno y evita la exposición de configuraciones sensibles.
Paso 1: Crear el archivo .env
El archivo .env no debe incluirse en el repositorio. Agregalo a .gitignore para protegerlo.
# Configuración general APP_ENV=desarrollo DEBUG=true LOG_LEVEL=debug # Configuración de la base de datos DB_CONNECTION=mysql DB_HOST=localhost DB_PORT=3306 DB_DATABASE=mi_base_de_datos DB_USERNAME=usuario DB_PASSWORD=contraseña
En producción, cambiá manualmente el valor de APP_ENV a produccion y ajustá las configuraciones necesarias.
Paso 2: Código en index.php
El siguiente código carga el archivo .env, detecta el entorno y usa las configuraciones según corresponda:
<?php // Función para cargar el archivo .env function loadEnv(string $path): void { if (!file_exists($path)) { throw new Exception("El archivo .env no existe en: $path"); } $lines = file($path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); foreach ($lines as $line) { if (str_starts_with(trim($line), '#')) { continue; // Saltar comentarios } [$key, $value] = explode('=', $line, 2); $_ENV[trim($key)] = trim($value); } } // Cargar las variables del archivo .env try { $envFilePath = __DIR__ . '/.env'; loadEnv($envFilePath); // Determinar el entorno $appEnv = $_ENV['APP_ENV'] ?? 'desarrollo'; $debug = filter_var($_ENV['DEBUG'] ?? false, FILTER_VALIDATE_BOOLEAN); // Mostrar configuraciones según el entorno echo "Entorno actual: $appEnv\n"; if ($debug) { echo "Modo depuración activado.\n"; } else { echo "Modo depuración desactivado.\n"; } // Ejemplo de uso: conexión a base de datos $dbHost = $_ENV['DB_HOST'] ?? 'localhost'; $dbName = $_ENV['DB_DATABASE'] ?? ''; echo "Conectando a la base de datos $dbName en $dbHost...\n"; } catch (Exception $e) { echo 'Error: ' . $e->getMessage(); }
# .env.example APP_ENV= DEBUG= DB_CONNECTION= DB_HOST= DB_PORT= DB_DATABASE= DB_USERNAME= DB_PASSWORD=
El uso de archivos .env con PHP puro es una forma eficaz y sencilla de gestionar configuraciones para diferentes entornos. Al implementar esta estrategia, asegurás un flujo de trabajo más seguro, organizado y escalable, evitando errores comunes como la exposición de credenciales en producción. ¡Aplicalo en tu próximo proyecto!