Blog de Gonzalo

TRABAJAR CON FICHEROS .ENV EN PHP

Para trabajar con ficheros .env en php existe una librería que se encarga de gestionar dichos ficheros y guardar las variables de entorno en el array superglobal $_ENV. Dicha librería se llama "PHP dotenv" (https://github.com/vlucas/phpdotenv) y básicamente permite la lectura sencilla de las variables de entorno en archivos de extensión ".env". Mediante estos archivos podemos almacenar las variables en una notación bastante habitual para poder definir las variables de entorno necesarias para cada entorno.
El uso de variables de entorno es importante para la separación del código con los valores de configuración.
Las variables de entorno cambiarán generalmente según el entorno de ejecución, es decir, cuando una aplicación está siendo ejecutada en distintos servidores. Por ejemplo, el servidor local para desarrollo y el servidor remoto donde se va a situar el sitio web accesible a los usuarios. Por tanto, separarlas en archivos independientes permitirá que el mismo código funcione en cualquier lugar, sin necesidad de modificaciones, independientemente de los valores de configuración que se tengan en cada entorno.

Archivos .env

Los archivos .env se pueden considerar un estándar para el almacenamiento de variables de entorno. Estos archivos tienen un formato muy sencillo y fácil de escribir y de leer.La sintaxis de los .env contiene pares clave (nombre de variable) y valor, separados por un carácter "=". Cada variable en una línea. Por ejemplo:

DB_USER="user"
DB_PASSWD="password"
DB_NAME="dbname"
DB_HOST="localhost"
DB_PORT=3306

También se pueden hacer declaraciones de variables que usan variables anteriormente definidas. Se referencian con ${?}. Por ejemplo:

BASE_DIR="/var/www/project"
CACHE_DIR="${BASE_DIR}/cache"
//cache dir tendrá el valor: "/var/www/project/cache"
TMP_DIR="${BASE_DIR}/tmp"

El código php para leer estos ficheros quedaría:

require_once 'vendor/autoload.php';

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
$tmpDir = $_ENV['TMP_DIR'];
var_dump($tmpDir );

Compartir en twitter