Conforme crecen nuestras aplicaciones en PHP, a veces necesitamos manejar muchas credenciales y configuraciones. Esto lo podemos hacer al leer un archivo ini en PHP.
Veamos el caso del framework Laravel, que guarda sus variables del entorno en un archivo llamado .env. No sé cómo sea parseado, pero el principio es el mismo.
Como dijimos al inicio del post, hoy veremos cómo parsear un archivo de configuración ini. Es un formato que Windows introdujo y quiere decir algo como Windows Initialization file según la Wikipedia.
Un ejemplo (sacado de Wikipedia) podría verse así:
[Red] ; Poner UsarProxy=1 si no hay cortafuegos UsarProxy=1 Proxy=192.168.0.1 [Preferencias] PaginaInicio=https://wikipedia.org Maximizar=1
Hay algunas cosas importantes:
Ahora sí vamos a interpretar un archivo ini con PHP.
El lenguaje proporciona una función que recibe 3 argumentos: la ruta del archivo, un booleano indicando si procesará las secciones y un entero indicando el modo de lectura.
Para leer un archivo ini en PHP vamos a concentrarnos en los dos primeros argumentos, pero aquí dejo la documentación completa: PHP: parse_ini_file – Manual
Podemos leerlo procesando las secciones. Hablar es de mal gusto, así que vamos al código. Recordemos el archivo ini de arriba.
Suponiendo que el nombre del fichero es configuracion.ini lo leeríamos así:
<?php $archivo = __DIR__ . "/configuracion.ini"; $contenido = parse_ini_file($archivo, true); echo var_export($contenido, true);
Fácil y sencillo. La salida al leer un archivo ini sería esta:
array ( 'Red' => array ( 'UsarProxy' => '1', 'Proxy' => '192.168.0.1', ), 'Preferencias' => array ( 'PaginaInicio' => 'https://wikipedia.org', 'Maximizar' => '1', ), );
Como vemos, es un array multidimensional. Cada clave es una sección, que en este caso es Red y Preferencias. Y cada clave tiene un array con las claves indicando las configuraciones.
Por lo que si yo quisiera extraer la página de inicio, haría esto:
<?php $archivo = __DIR__ . "/configuracion.ini"; $contenido = parse_ini_file($archivo, true); $pagina_inicio = $contenido["Preferencias"]["PaginaInicio"]; echo "La página de inicio es: $pagina_inicio";
Lo que hay que hacer es simplemente acceder a los valores de nuestro arreglo.
Ahora supongamos que no queremos un arreglo bidimensional, sino uno sólo con claves y valores. Para ello, ignoraríamos las secciones.
Si leemos el mismo archivo con el código de abajo(notar que el segundo argumento de parse_ini_file es false)…
<?php $archivo = __DIR__ . "/configuracion.ini"; $contenido = parse_ini_file($archivo, false); echo var_export($contenido, true);
El resultado sería este:
array ( 'UsarProxy' => '1', 'Proxy' => '192.168.0.1', 'PaginaInicio' => 'https://wikipedia.org', 'Maximizar' => '1', )
Como vemos es un arreglo de una dimensión. Y la función puso todos los valores en él. Si queremos extraer la página de inicio haríamos esto:
<?php $archivo = __DIR__ . "/configuracion.ini"; $contenido = parse_ini_file($archivo, false); $pagina_inicio = $contenido["PaginaInicio"]; echo "La página de inicio es $pagina_inicio";
Nota: si encuentra claves repetidas, PHP tomará el último valor que encuentre.
En mi caso utilizo uno de estos archivos en una app para guardar mis credenciales de acceso a las bases de datos. Se ve algo así:
; <?php exit; ?> ; El comentario de arriba es para que, si el archivo es visto ; desde el navegador, se salga inmediatamente del script, ocultando ; la información que aquí existe ; En cambio, cuando es tratado como un archivo .ini, las ; líneas que comienzan con un ; son ignoradas ; Un archivo de configuración ; que guarda todas las credenciales ; para cada cosa ; Las líneas en blanco y aquellas que comienzan ; con un punto y coma (;) son ignoradas USUARIO_MYSQL = "woopsie" PASS_MYSQL = "" NOMBRE_BD_MYSQL = "bla" HOST_MYSQL = "localhost"
Sigue leyendo para saber algunas cosas sobre el primer comentario del archivo y la seguridad
Si exponemos este fichero al público (es decir, que sea accesible desde el navegador) recomiendo poner el siguiente comentario al inicio del archivo:
; <?php exit; ?>
Y guardar nuestro archivo con extensión php. Cuando sea interpretado como PHP, sólo imprimirá el ; pero inmediatamente se detendrá la ejecución con exit.
En cambio, cuando sea leído como un archivo INI, el comentario que inicia con ; será ignorado.
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Esta web usa cookies.
Ver comentarios
Muchas gracias!!!!
De nada. Saludos!