¿En qué consisten las variables de entorno en PHP con archivos .env?
Las variables de entorno son un conjunto de valores que contienen información útil del programa y de los sistemas que están utilizando los usuarios para su ejecución. Afectan a cualquier software y resultan especialmente útiles de cara al backend. En este artículo práctico, nos centramos en una de las formas más sencillas de incorporar estas variables en aplicaciones que utilicen PHP: la librería PHP dotenv, que nos permite leer esas variables en archivos con la extensión .env.
La utilidad de estas variables de entorno se debe a algo tan sencillo como que, básicamente, separa el código por responsabilidades. Por ejemplo, cuando una aplicación se ejecuta desde diferentes servidores, es necesario separar en archivos que admitan que el mismo código funcione en cualquier lugar, sin que los valores de configuración afecten a cada entorno.
Si tenemos en cuenta los valores de una conexión de una base de datos (host, user, password…), tanto en el servidor de desarrollo como en el de producción, seguramente sean distintos. Pues bien, esos valores podremos almacenarlos en variables de entorno para que se utilicen en las diferentes conexiones con la base de datos. Otros elementos que podrían separarse, son elementos como credenciales de acceso, llaves APIs (API Keys), nombre del host donde se ejecuta la aplicación, etc.
Los archivos .env
Los archivos .env pueden valorarse como un modelo para el almacenamiento de variables de entorno y su formato es muy sencillo de entender. Escribiremos los .env con pares clave (nombre de variable) y valor, separados por un carácter = y situaremos cada uno en una línea diferente.
MODE='development' HOST='local.arsys.es ' DDBB_USER='root' DDBB_PASSWORD='12345' DDBB_HOST='localhost'
Colocaremos el archivo .env en la raíz del proyecto (nos referimos a fuera del directorio de publicación), sin nombre (solo extensión) y que no resulte accesible por Apache. Es decir, en un directorio por encima para no dar acceso a los usuarios a estas variables. Si trabajamos con Linux y Mac tendremos que tener en cuenta que los los archivos que comienzan por . se consideran ocultos.
Esta sería la estructura típica:
Vemos que el directorio de publicación, donde tenemos index.php, se llama httpdocs. .env no aparece para que, como hemos dicho anteriormente, los usuarios no tengan acceso.
Un vistazo a la librería PHP dotenv
La librería PHP dotenv es una opción para leer las variables de entorno en archivos .env y es compatible con PHP desde la versión 5.4.
Instalación de PHP dotenv
Echaremos mano de Composer para la instalación utilizando el siguiente comando:
php composer.phar require vlucas/phpdotenv
Cuando esté instalado podrás usarlo con tu código con autoload.
<?php require('../vendor/autoload.php'); ?>
Cargando archivos con variables de entorno
Con PHP dotenv podemos tener varios archivos de configuración. Para ello tenemos que crear un nuevo objeto de clase Dotenv (enviando la ruta) y ejecutar el método load().
$dotenv = new Dotenv\Dotenv(‘../’); $dotenv->load();
Accediendo a las variables de entorno
Ya cargados los archivos de variables de entorno, tendremos disponibles sus variables a través de métodos diferentes.
Por ejemplo, con la función getenv() obtendremos el valor de la variable de entorno a la que queremos acceder.
- Desde array superglobal $_ENV
- Desde array superglobal $_SERVER
Para acceder al valor de la variable MODE podríamos hacerlo de esta forma:
$mode = getenv('MODE');
¿Podemos sobrescribir variables de entorno?
Una variable de entorno no se puede sobrescribir ya que normalmente es de solo de lectura. Aun así, si queremos que tengan otros valores, podemos usar el método overload(). Con esto, abriremos un archivo .env y machacaremos los valores anteriores.
$dotenv = new Dotenv\Dotenv('./'); $dotenv->overload();
Las variables de entorno resultan muy útiles para casi todos los lenguajes backend, no solamente para PHP. Saber qué son y conocer librerías como PHP dotenv puede servirnos para consumir variables de entorno en PHP de forma sencilla, almacenándolas en archivos con formato .env, el más extendido.