SlideShare una empresa de Scribd logo
1 de 14
Descargar para leer sin conexión
Meetups
@SergioCarracedoRoi Scroll CTO
Disfrutando del desarrollo web
desde 1998.
@rolando_caldas
https://rolandocaldas.com
En una galaxia muy lejana...
<?php
/**
* Configuración base de datos
*/
$dbname = 'adfadf';
$dbuser = 'adfadf';
$dbpassword = '123456';
$dbhost = 'localhost';
Meetups
… bueno… igual no tan lejana ...
Meetups
<?php
/**
* Configuración básica de WordPress 4.9.2
*/
define('DB_NAME', 'adfadfa');
define('DB_USER', 'adfadfa');
define('DB_PASSWORD','123456');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8mb4');
define('DB_COLLATE', '');
[...]
$table_prefix = 'wp_';
define('WP_DEBUG', false);
/* ¡Eso es todo, deja de editar! Feliz blogging */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
require_once(ABSPATH . 'wp-settings.php');
Problemas de estos ficheros de configuración
Meetups
● El fichero tiene que modificarse en cada entorno (local, desarrollo, pre-producción, producción)
● Como es un **** decides que tu repositorio ignore el fichero de configuración
● Como no tienes fichero de configuración en tu entorno, tienes que tener uno de ejemplo
● Como tengas varios servicios integrado y cada uno con su fichero de configuración… el caos
está servido.
La solución: Variables de entorno
Meetups
Las variables de entorno son aquellas que están
asociadas al espacio de nombres global de PHP.
Consecuencia: No se crean en tu aplicación,
sino que le vienen dadas “desde fuera”.
Creando variables de entorno desde Apache
Meetups
<VirtualHost example.com:80>
...
SetEnv dbname adfadf
SetEnv dbuser adfadf
SetEnv dbpassword 123456
SetEnv dbhost localhost
...
</VirtualHost>
Creando variables de entorno desde NGINX
Meetups
location / {
...
fastcgi_param dbname adfadf;
fastcgi_param dbuser adfadf;
fastcgi_param dbpassword 123456;
fastcgi_param dbhost localhost;
...
}
… y así queda nuestra configuración ...
<?php
$dbname = getenv('dbname');
$dbuser = getenv('dbuser');
$dbpassword = getenv('dbpassword');
$dbhost = getenv('dbhost');
Meetups
… pero andar a editar Apache, NGINX ...
Meetups
Vance Lucas… tu phpdotenv nos da la vida
Meetups
● “Loads environment variables from .env to getenv()”
● “A PHP version of the original Ruby dotenv.” (https://github.com/bkeepers/dotenv)
● COMPATIBLE with PHP's built-in web server and CLI runner.
● Es inmutable. Salvo que le digas lo contrario, respeta las variables de entorno existentes.
● Puedes requerir la existencia de determinadas variables de entorno.
● Puedes requerir la existencia de determinadas opciones o drivers en tu entorno.
● Puedes obligar que determinadas variables de entorno no estén vacías.
● Puedes obligar que determinadas variables de entorno sean integers.
● En resumen: Su opciones y generación de excepciones pueden servir de documentación “al
vuelo” cuando configuras tu entorno local.
… y así queda nuestra configuración ...
<?php
$dotenv = new DotenvDotenv(__DIR__);
$dotenv->load();
dotenv->required(['dbname', 'dbuser',
'dbpassword', 'dbhost']);
?>
<?php
$dbname = getenv('dbname');
$dbuser = getenv('dbuser');
$dbpassword = getenv('dbpassword');
$dbhost = getenv('dbhost');
Meetups
… y así, todo fluye ...
Meetups
www.opsou.com www.pedrofigueras.com

Más contenido relacionado

La actualidad más candente

La actualidad más candente (17)

Creacion de servidor web y dns
Creacion de servidor web y dnsCreacion de servidor web y dns
Creacion de servidor web y dns
 
Ansible administracion simplificada
Ansible   administracion simplificada Ansible   administracion simplificada
Ansible administracion simplificada
 
Redis no es solo una caché
Redis no es solo una cachéRedis no es solo una caché
Redis no es solo una caché
 
Observium
ObserviumObservium
Observium
 
Observium
ObserviumObservium
Observium
 
Bd practica 1.10
Bd practica 1.10Bd practica 1.10
Bd practica 1.10
 
Aprendiendo REDIS en 20 minutos
Aprendiendo REDIS en 20 minutosAprendiendo REDIS en 20 minutos
Aprendiendo REDIS en 20 minutos
 
Taller Redis
Taller RedisTaller Redis
Taller Redis
 
Nis Vs Ldap
Nis Vs LdapNis Vs Ldap
Nis Vs Ldap
 
Las cronicas de redis
Las cronicas de redisLas cronicas de redis
Las cronicas de redis
 
Apli t1 practicas_apache
Apli t1 practicas_apacheApli t1 practicas_apache
Apli t1 practicas_apache
 
Varnish http cache
Varnish http cacheVarnish http cache
Varnish http cache
 
Ataque por inyección de código sql y sniffing
Ataque por inyección de código sql y sniffingAtaque por inyección de código sql y sniffing
Ataque por inyección de código sql y sniffing
 
1 verificación de paquetes de bind esté instalado con el comando 2
1 verificación de paquetes de bind esté instalado con el comando     21 verificación de paquetes de bind esté instalado con el comando     2
1 verificación de paquetes de bind esté instalado con el comando 2
 
Comandos gpg
Comandos gpgComandos gpg
Comandos gpg
 
La api de salesforce
La api de salesforceLa api de salesforce
La api de salesforce
 
Cifrado DD
Cifrado DDCifrado DD
Cifrado DD
 

Similar a PHPVigo #19 - Lightning variables de entorno

Instalación y configuración de ldap server en Debian 8.7.1
Instalación y configuración de ldap server en Debian 8.7.1Instalación y configuración de ldap server en Debian 8.7.1
Instalación y configuración de ldap server en Debian 8.7.1Diego Montiel
 
DNS dinámico: Actualización dinámica de nombres en una red
DNS dinámico: Actualización dinámica de nombres en una redDNS dinámico: Actualización dinámica de nombres en una red
DNS dinámico: Actualización dinámica de nombres en una redEsteban Saavedra
 
Deployer PHP. Presentación para #PHPSevilla
Deployer PHP. Presentación para #PHPSevillaDeployer PHP. Presentación para #PHPSevilla
Deployer PHP. Presentación para #PHPSevillaAgencia INNN
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la DebianLeonardo Cezar
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la DebianLeonardo Cezar
 
Desarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryDesarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryJavier P.
 
Integración LDAP + SAMBA
Integración LDAP + SAMBAIntegración LDAP + SAMBA
Integración LDAP + SAMBAcyberleon95
 
Desarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQueryDesarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQueryJavier P.
 
Curso Blog Marketing con Wordpress 02 instalacion local
Curso Blog Marketing con Wordpress 02 instalacion localCurso Blog Marketing con Wordpress 02 instalacion local
Curso Blog Marketing con Wordpress 02 instalacion localDavid Vaquero
 
Jose Selvi - Adaptando exploits para evitar la frustración [RootedSatellite V...
Jose Selvi - Adaptando exploits para evitar la frustración [RootedSatellite V...Jose Selvi - Adaptando exploits para evitar la frustración [RootedSatellite V...
Jose Selvi - Adaptando exploits para evitar la frustración [RootedSatellite V...RootedCON
 
WordPress Multisite, un WordPress para dominarlos a todos
WordPress Multisite, un WordPress para dominarlos a todosWordPress Multisite, un WordPress para dominarlos a todos
WordPress Multisite, un WordPress para dominarlos a todosOscar Abad Folgueira
 
Desarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryDesarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryJavier P.
 
Mongodb administración
Mongodb administraciónMongodb administración
Mongodb administraciónJuan Ladetto
 

Similar a PHPVigo #19 - Lightning variables de entorno (20)

Instalación y configuración de ldap server en Debian 8.7.1
Instalación y configuración de ldap server en Debian 8.7.1Instalación y configuración de ldap server en Debian 8.7.1
Instalación y configuración de ldap server en Debian 8.7.1
 
DNS dinámico: Actualización dinámica de nombres en una red
DNS dinámico: Actualización dinámica de nombres en una redDNS dinámico: Actualización dinámica de nombres en una red
DNS dinámico: Actualización dinámica de nombres en una red
 
Deployer PHP. Presentación para #PHPSevilla
Deployer PHP. Presentación para #PHPSevillaDeployer PHP. Presentación para #PHPSevilla
Deployer PHP. Presentación para #PHPSevilla
 
GOsa+samba+ldap
GOsa+samba+ldapGOsa+samba+ldap
GOsa+samba+ldap
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la Debian
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la Debian
 
Desarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryDesarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQuery
 
Integración LDAP + SAMBA
Integración LDAP + SAMBAIntegración LDAP + SAMBA
Integración LDAP + SAMBA
 
Taller de Capistrano
Taller de CapistranoTaller de Capistrano
Taller de Capistrano
 
Mongo db course administration
Mongo db course   administrationMongo db course   administration
Mongo db course administration
 
Trabajo zabbix
Trabajo zabbixTrabajo zabbix
Trabajo zabbix
 
Desarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQueryDesarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQuery
 
Instalar servidores en debian
Instalar servidores en debianInstalar servidores en debian
Instalar servidores en debian
 
Curso Blog Marketing con Wordpress 02 instalacion local
Curso Blog Marketing con Wordpress 02 instalacion localCurso Blog Marketing con Wordpress 02 instalacion local
Curso Blog Marketing con Wordpress 02 instalacion local
 
Jose Selvi - Adaptando exploits para evitar la frustración [RootedSatellite V...
Jose Selvi - Adaptando exploits para evitar la frustración [RootedSatellite V...Jose Selvi - Adaptando exploits para evitar la frustración [RootedSatellite V...
Jose Selvi - Adaptando exploits para evitar la frustración [RootedSatellite V...
 
Entorno PHP
Entorno PHPEntorno PHP
Entorno PHP
 
Segunda sesion
Segunda sesionSegunda sesion
Segunda sesion
 
WordPress Multisite, un WordPress para dominarlos a todos
WordPress Multisite, un WordPress para dominarlos a todosWordPress Multisite, un WordPress para dominarlos a todos
WordPress Multisite, un WordPress para dominarlos a todos
 
Desarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryDesarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQuery
 
Mongodb administración
Mongodb administraciónMongodb administración
Mongodb administración
 

Más de Rolando Caldas

PHPVigo #28 principios solid en la vida real
PHPVigo #28   principios solid en la vida realPHPVigo #28   principios solid en la vida real
PHPVigo #28 principios solid en la vida realRolando Caldas
 
PHPVigo #26 - Lightning Docker phpUnit
PHPVigo #26 - Lightning Docker phpUnitPHPVigo #26 - Lightning Docker phpUnit
PHPVigo #26 - Lightning Docker phpUnitRolando Caldas
 
PHPVigo #23 - Taller de Docker para PHP
PHPVigo #23 - Taller de Docker para PHPPHPVigo #23 - Taller de Docker para PHP
PHPVigo #23 - Taller de Docker para PHPRolando Caldas
 
PHPVigo #17 - lightning password hash
PHPVigo #17 - lightning password hashPHPVigo #17 - lightning password hash
PHPVigo #17 - lightning password hashRolando Caldas
 
PHPVigo #16 - Lightning filter input
PHPVigo #16 - Lightning filter inputPHPVigo #16 - Lightning filter input
PHPVigo #16 - Lightning filter inputRolando Caldas
 
Pleased to meet you, Laravel
Pleased to meet you, LaravelPleased to meet you, Laravel
Pleased to meet you, LaravelRolando Caldas
 

Más de Rolando Caldas (6)

PHPVigo #28 principios solid en la vida real
PHPVigo #28   principios solid en la vida realPHPVigo #28   principios solid en la vida real
PHPVigo #28 principios solid en la vida real
 
PHPVigo #26 - Lightning Docker phpUnit
PHPVigo #26 - Lightning Docker phpUnitPHPVigo #26 - Lightning Docker phpUnit
PHPVigo #26 - Lightning Docker phpUnit
 
PHPVigo #23 - Taller de Docker para PHP
PHPVigo #23 - Taller de Docker para PHPPHPVigo #23 - Taller de Docker para PHP
PHPVigo #23 - Taller de Docker para PHP
 
PHPVigo #17 - lightning password hash
PHPVigo #17 - lightning password hashPHPVigo #17 - lightning password hash
PHPVigo #17 - lightning password hash
 
PHPVigo #16 - Lightning filter input
PHPVigo #16 - Lightning filter inputPHPVigo #16 - Lightning filter input
PHPVigo #16 - Lightning filter input
 
Pleased to meet you, Laravel
Pleased to meet you, LaravelPleased to meet you, Laravel
Pleased to meet you, Laravel
 

Último

Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3AlexysCaytanoMelndez1
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionarmando_cardenas
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfmasogeis
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...ITeC Instituto Tecnología Construcción
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOSelenaCoronadoHuaman
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTEREMMAFLORESCARMONA
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Opentix
 

Último (7)

Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacion
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdf
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTER
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200
 

PHPVigo #19 - Lightning variables de entorno

  • 1.
  • 2. Meetups @SergioCarracedoRoi Scroll CTO Disfrutando del desarrollo web desde 1998. @rolando_caldas https://rolandocaldas.com
  • 3. En una galaxia muy lejana... <?php /** * Configuración base de datos */ $dbname = 'adfadf'; $dbuser = 'adfadf'; $dbpassword = '123456'; $dbhost = 'localhost'; Meetups
  • 4. … bueno… igual no tan lejana ... Meetups <?php /** * Configuración básica de WordPress 4.9.2 */ define('DB_NAME', 'adfadfa'); define('DB_USER', 'adfadfa'); define('DB_PASSWORD','123456'); define('DB_HOST', 'localhost'); define('DB_CHARSET', 'utf8mb4'); define('DB_COLLATE', ''); [...] $table_prefix = 'wp_'; define('WP_DEBUG', false); /* ¡Eso es todo, deja de editar! Feliz blogging */ if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/'); require_once(ABSPATH . 'wp-settings.php');
  • 5. Problemas de estos ficheros de configuración Meetups ● El fichero tiene que modificarse en cada entorno (local, desarrollo, pre-producción, producción) ● Como es un **** decides que tu repositorio ignore el fichero de configuración ● Como no tienes fichero de configuración en tu entorno, tienes que tener uno de ejemplo ● Como tengas varios servicios integrado y cada uno con su fichero de configuración… el caos está servido.
  • 6. La solución: Variables de entorno Meetups Las variables de entorno son aquellas que están asociadas al espacio de nombres global de PHP. Consecuencia: No se crean en tu aplicación, sino que le vienen dadas “desde fuera”.
  • 7. Creando variables de entorno desde Apache Meetups <VirtualHost example.com:80> ... SetEnv dbname adfadf SetEnv dbuser adfadf SetEnv dbpassword 123456 SetEnv dbhost localhost ... </VirtualHost>
  • 8. Creando variables de entorno desde NGINX Meetups location / { ... fastcgi_param dbname adfadf; fastcgi_param dbuser adfadf; fastcgi_param dbpassword 123456; fastcgi_param dbhost localhost; ... }
  • 9. … y así queda nuestra configuración ... <?php $dbname = getenv('dbname'); $dbuser = getenv('dbuser'); $dbpassword = getenv('dbpassword'); $dbhost = getenv('dbhost'); Meetups
  • 10. … pero andar a editar Apache, NGINX ... Meetups
  • 11. Vance Lucas… tu phpdotenv nos da la vida Meetups ● “Loads environment variables from .env to getenv()” ● “A PHP version of the original Ruby dotenv.” (https://github.com/bkeepers/dotenv) ● COMPATIBLE with PHP's built-in web server and CLI runner. ● Es inmutable. Salvo que le digas lo contrario, respeta las variables de entorno existentes. ● Puedes requerir la existencia de determinadas variables de entorno. ● Puedes requerir la existencia de determinadas opciones o drivers en tu entorno. ● Puedes obligar que determinadas variables de entorno no estén vacías. ● Puedes obligar que determinadas variables de entorno sean integers. ● En resumen: Su opciones y generación de excepciones pueden servir de documentación “al vuelo” cuando configuras tu entorno local.
  • 12. … y así queda nuestra configuración ... <?php $dotenv = new DotenvDotenv(__DIR__); $dotenv->load(); dotenv->required(['dbname', 'dbuser', 'dbpassword', 'dbhost']); ?> <?php $dbname = getenv('dbname'); $dbuser = getenv('dbuser'); $dbpassword = getenv('dbpassword'); $dbhost = getenv('dbhost'); Meetups
  • 13. … y así, todo fluye ... Meetups