3 visitas

Cómo usar archivos .env con PHP puro: configuración para desarrollo y producción

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.

¿Qué es un archivo .env?

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.

Ventajas de usar .env en PHP

  • Separación de configuraciones por entorno: Cada ambiente (desarrollo, producción) puede tener sus valores específicos sin modificar el código.
  • Seguridad: Los valores sensibles no se incluyen en el repositorio.
  • Flexibilidad: Facilita el mantenimiento y los despliegues automatizados.

Implementación en PHP puro

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();
}

Explicación del código

  1. Carga del archivo .env: La función loadEnv lee el archivo línea por línea, separa las claves de los valores y las almacena en $_ENV.
  2. Detección del entorno: Se utiliza la clave APP_ENV para determinar si el entorno es desarrollo o produccion.
  3. Configuraciones dinámicas: Los valores como DEBUG y la configuración de la base de datos se ajustan automáticamente según el archivo .env.

Mejores prácticas

  1. No subas el archivo .env al repositorio: Siempre ignoralo en Git.
  2. Incluí un .env.example: Proporcioná un archivo de ejemplo con claves y valores genéricos.
  3. Manejá valores sensibles cuidadosamente: Para producción, configurá el archivo .env directamente en el servidor.
# .env.example
APP_ENV=
DEBUG=
DB_CONNECTION=
DB_HOST=
DB_PORT=
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=

Conclusión

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!

Cómo usar archivos .env con PHP puro: configuración para desarrollo y producción
10 December 2024

Me dedico a crear soluciones web eficientes y a compartir mi conocimiento con la comunidad de desarrolladores.

Alejandro Leone
Backend Developer