Taller > PHP > Superglobals
Superglobal $_ENV en PHP
PHP ofrece varias superglobales para acceder a información relevante del entorno de ejecución, una de las más importantes es $_ENV. Esta variable es un array asociativo que almacena todas las variables de entorno disponibles durante la ejecución del script.
Estas variables pueden variar según el sistema operativo y el servidor donde esté alojado el script PHP. Además, PHP ofrece funciones adicionales para interactuar con las variables de entorno, como getenv() y putenv().
¿Qué es $_ENV?
La superglobal $_ENV contiene todas las variables de entorno del servidor. Estas variables suelen ser proporcionadas por el shell o sistema operativo en el que se ejecuta PHP.
Dependiendo del servidor, las variables de entorno disponibles pueden incluir configuraciones del sistema, rutas del servidor y otras variables relevantes para la ejecución del script.
Por ejemplo, las variables de entorno más comunes incluyen:
PATH: Lista de rutas donde el sistema operativo busca los ejecutables.
HOME: El directorio principal del usuario actual.
USER: El nombre de usuario con el que se ha iniciado sesión en el sistema.
Importancia de las Variables de Entorno
Las variables de entorno permiten que un sistema operativo o servidor proporcione información relevante al script PHP sin necesidad de que esta se pase explícitamente.
Esto es útil para definir configuraciones a nivel del sistema, como la ubicación de binarios, directorios de datos, o credenciales.
Mostrando las Variables de Entorno
Podemos utilizar un bucle foreach para recorrer todas las variables de entorno y mostrarlas. A continuación, un ejemplo que lista todas las variables presentes:
Ejemplo: Listado de todas las Variables de Entorno
<?php
foreach ($_ENV as $clave => $valor) {
echo $clave . " => " . $valor . "<br>";
}
?>
| Variable | Valor |
|---|---|
| ALLUSERSPROFILE | C:\ProgramData |
| APPDATA | C:\Users\user\AppData\Roaming |
| CommonProgramFiles | C:\Program Files\Common Files |
| CommonProgramFiles(x86) | C:\Program Files (x86)\Common Files |
| CommonProgramW6432 | C:\Program Files\Common Files |
| COMPUTERNAME | GNVBGL3 |
| ComSpec | C:\WINDOWS\system32\cmd.exe |
| DriverData | C:\Windows\System32\Drivers\DriverData |
| HOMEDRIVE | C: |
| HOMEPATH | \Users\user |
| LOCALAPPDATA | C:\Users\user\AppData\Local |
| LOGONSERVER | \GNVBGL3 |
| MOZ_PLUGIN_PATH | C:\Program Files (x86)\Foxit Software\Foxit PDF Reader\plugins |
| NUMBER_OF_PROCESSORS | 8 |
| OneDrive | C:\Users\user\OneDrive |
| OneDriveConsumer | C:\Users\user\OneDrive |
| OS | Windows_NT |
| Path | C:\Python311\Scripts\;C:\Python311\;C:\WINDOWS\system32; |
| C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\xampp\php; | |
| C:\Users\user\AppData\Local\Microsoft\WindowsApps; | |
| PATHEXT | .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW |
| PROCESSOR_ARCHITECTURE | AMD64 |
| PROCESSOR_IDENTIFIER | Intel64 Family 6 Model 140 Stepping 1, GenuineIntel |
| PROCESSOR_LEVEL | 6 |
| PROCESSOR_REVISION | 8c01 |
| ProgramData | C:\ProgramData |
| ProgramFiles | C:\Program Files |
| ProgramFiles(x86) | C:\Program Files (x86) |
| ProgramW6432 | C:\Program Files |
| PSModulePath | C:\Program Files\WindowsPowerShell\Modules; |
| C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules | |
| PUBLIC | C:\Users\Public |
| SystemDrive | C: |
| SystemRoot | C:\WINDOWS |
| TEMP | C:\Users\user\AppData\Local\Temp |
| TMP | C:\Users\user\AppData\Local\Temp |
| USERDOMAIN | GNVBGL3 |
| USERDOMAIN_ROAMINGPROFILE | GNVBGL3 |
| USERNAME | user |
| USERPROFILE | C:\Users\user |
| windir | C:\WINDOWS |
| ZES_ENABLE_SYSMAN | 1 |
| __COMPAT_LAYER | RunAsAdmin Installer |
| AP_PARENT_PID | 10608 |
Este listado contiene todas las variables de entorno que un sistema Windows puede proporcionar. Si ejecutas el código en un servidor Linux o macOS, las variables disponibles y sus valores serán diferentes, pero el método para acceder a ellas será el mismo.
Accediendo a Variables de Entorno con $_ENV
El array $_ENV se puede recorrer con un bucle foreach para mostrar todas las variables de entorno disponibles. A continuación, un ejemplo que lista todas las variables presentes:
Ejemplo: Listado de todas las Variables de Entorno
<?php
foreach ($_ENV as $clave => $valor) {
echo $clave . " => " . $valor . "<br>";
}
?>
Explicación del Código
El array asociativo $_ENV contiene pares clave-valor, donde las claves son los nombres de las variables de entorno y los valores son sus respectivos contenidos.
El bucle foreach recorre cada variable y las imprime en pantalla.
Resultado (en un sistema Linux)
HOME => /home/usuario
SHELL => /bin/bash
USER => usuario
PATH => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Acceso a Variables Específicas con $_ENV
También es posible acceder directamente a una variable de entorno utilizando la clave correspondiente en el array $_ENV. Por ejemplo, si deseas acceder a la variable PATH, puedes hacerlo de la siguiente manera:
Ejemplo: Acceso a una Variable Específica
<?php
echo "Ruta del sistema: " . $_ENV['PATH'];
?>
Explicación del Código
$_ENV['PATH'] devuelve el valor de la variable de entorno PATH, que es la ruta del sistema donde se buscan los ejecutables.
Nota sobre la Configuración de php.ini
El contenido del array $_ENV puede depender de la configuración del archivo php.ini, específicamente de la directiva variables_order. Si el valor de esta directiva no incluye la letra “E”, es posible que $_ENV esté vacío.
Para asegurarte de que PHP rellene el array $_ENV, la directiva variables_order debe estar configurada de la siguiente manera:
variables_order = "EGPCS"
Esta configuración asegura que PHP cargue las variables de entorno, además de las variables de sesión, POST, COOKIE y SERVER.
Usando la Función getenv()
Si prefieres una forma más flexible para acceder a las variables de entorno, puedes usar la función getenv(). Esta función no depende de la configuración de php.ini, por lo que es una opción más segura para obtener el valor de una variable de entorno.
Ejemplo: Uso de getenv()
<?php
echo "Ruta del sistema: " . getenv('PATH');
?>
Explicación del Código
getenv('PATH') obtiene directamente el valor de la variable de entorno PATH, sin necesidad de acceder al array $_ENV.
Resultado
Ruta del sistema: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Diferencias entre $_ENV y getenv()
$_ENV: Depende de la configuración de php.ini y puede estar vacío si la configuración no incluye «E» en variables_order.
getenv(): Funciona independientemente de la configuración de php.ini y es preferible cuando se necesita asegurarse de que las variables de entorno están disponibles.
Creando Variables de Entorno con putenv()
La función putenv() permite establecer variables de entorno dentro del script PHP. Estas variables solo estarán disponibles durante la ejecución del script y no persistirán después de su finalización.
Ejemplo: Creando una Variable de Entorno Temporal
<?php
putenv("PHP_USUARIO_TEMPORAL=admin");
echo "Usuario temporal: " . getenv("PHP_USUARIO_TEMPORAL");
?>
Explicación del Código
putenv("PHP_USUARIO_TEMPORAL=admin") establece una nueva variable de entorno llamada PHP_USUARIO_TEMPORAL con el valor admin.
getenv("PHP_USUARIO_TEMPORAL") recupera el valor de la variable creada.
Resultado
Usuario temporal: admin
Restricciones en el Uso de putenv()
Aunque puedes crear variables de entorno personalizadas, hay restricciones sobre qué variables puedes modificar. Las variables protegidas por la directiva safe_mode_protected_env_vars en el archivo php.ini no pueden ser alteradas. Por ejemplo, modificar variables críticas del sistema como PATH o USER puede estar restringido.
Mejoras en la Seguridad con Variables de Entorno
Algunas variables de entorno contienen información sensible, como rutas a claves privadas, configuraciones de base de datos o credenciales de API. Es recomendable seguir las siguientes prácticas para asegurar el manejo seguro de las variables de entorno:
No exponer variables sensibles: Evita imprimir valores sensibles de variables de entorno en la salida del navegador.
Definir variables en entornos controlados: Utiliza archivos .env o configuraciones de servidor para definir variables de entorno importantes fuera del código fuente.
Validar las entradas: Si vas a usar una variable de entorno, asegúrate de validar su contenido antes de utilizarlo en operaciones críticas.
Conclusión
Las variables de entorno juegan un papel importante en la configuración y ejecución de aplicaciones en PHP. La superglobal $_ENV y las funciones getenv() y putenv() te permiten acceder y manipular estas variables de manera eficiente.
Al conocer la diferencia entre ellas y cómo están influenciadas por la configuración de php.ini, puedes aprovechar estas herramientas para hacer que tus scripts PHP sean más dinámicos y seguros.