Onde você armazena as configurações sensíveis do seu projeto PHP? Se as define diretamente em seu código, você pode estar correndo um enorme risco de Segurança.
Configurações como nomes de usuário de banco de dados, senhas de SMTP e outras informações sensíveis devem ficar em um local seguro. E o mais importante: fora do controle de versão do software (como Git, SVN e outros).
Neste artigo vou mostrar como utilizar o DotEnv de forma extremamente. Com duas linhas de código, todas as configurações importantes de seu projeto estarão disponíveis em variáveis de ambiente.
Essa é a ideia do projeto DotEnv. As configurações sensíveis ficam armazenadas em um arquivo chamado .env
(o ponto caracteriza um arquivo oculto em sistemas Unix-Like).
Todas as variáveis definidas no .env
são automaticamente carregadas para variáveis de ambiente. Ou seja, para buscar seus valores, podemos usar a função getenv()
ou o array $_ENV
.
Instalando o DotEnv
Para instalar o DotEnv, vou utilizar o Composer. Se você não utiliza Composer, o que está esperando? Veja este meu artigo com o básico do Composer. Se quiser ir mais além e aprender tudo sobre essa maravilhosa ferramenta, conheça o meu curso ULTIMATE COMPOSER.
Abra o terminal/prompt, no diretório-raiz da sua aplicação, e digite este comando:
composer require vlucas/phpdotenv |
Depois de alguns segundos, o DotEnv terá sido completamente baixado e você verá esta saída:
Using version ^2.0 for vlucas/phpdotenv ./composer.json has been created Loading composer repositories with package information Updating dependencies (including require-dev) - Installing vlucas/phpdotenv (v2.0.1) Downloading: 100% Writing lock file Generating autoload files |
Criando o Arquivo .env
Você precisa criar, no diretório-raiz do projeto, um arquivo chamado .env
, que vai armazenar as variáveis. É importante colocar o ponto no começo, pois isso caracteriza um arquivo oculto, assim como é o .htaccess
, por exemplo.
No arquivo, basta definir as variáveis com esta sintaxe:
NOME_DA_VARIAVEL=VALOR_DA_VARIAVEL |
Esse arquivo segue o mesmo padrão de um arquivo Shell Script. Inclusive, você pode inserir comentários, iniciando a linha com sustenido:
# Explicação sobre a variável NOME_DA_VARIAVEL=VALOR_DA_VARIAVEL |
Se você estiver usando controle de versão (como Git ou SVN), lembre-se de não versionar o arquivo .env
, por razões de segurança. Coloque-o no .gitignore
para garantir que seja ignorado.
É recomendável criar um arquivo chamado .env.example
, com as mesmas variáveis do .env
, mas com valores genéricos, apenas de exemplo. Dessa forma é fácil criar o arquivo real a partir do exemplo. Bastaria copiar o .env.example
para .env
e alterar os valores.
Carregando as Variáveis de Ambiente
Agora que já temos o DotEnv instalado e o arquivo .env
criado, precisamos carregar as variáveis do arquivo para variáveis de ambiente.
E isso é extremamente fácil! Apenas duas linhas!
Crie o arquivo index.php
com este conteúdo:
<?php // autoload do Composer require 'vendor/autoload.php'; // as duas linhas que carregam as variáveis do .env para variáveis de ambiente $dotenv = new Dotenv\Dotenv( __DIR__ ); $dotenv->load(); |
Pronto! Todas as variáveis do arquivo .env
agora estarão definidas como variáveis de ambiente.
Você pode confirmar isso desta forma:
print_r( $_ENV ); |
Você verá suas variáveis no array exibido.
Para buscar uma única variável, pode usar o array $_ENV
ou a função getenv()
:
echo $_ENV['NOME_DA_VARIAVEL']; // ou echo getenv( 'NOME_DA_VARIAVEL' ); |
Conclusão
O DotEnv é a forma mais segura de armazenar as configurações sensíveis de seu projeto.
Você pode combinar essa técnica com um conceito de Bootstrapping, que explico neste artigo. Assim você terá um sistema seguro, rápido e confiável.
No meu Curso ULTIMATE PHP, explico diversas outras técnicas e dicas sobre PHP. Ensino desde o básico da linguagem, detalhando toda a teoria essencial, para criar sistemas robustos, confiáveis e seguros. Tudo de forma 100% prática, com exemplos. Clique Aqui e Conheça Melhor o Curso.
Roberto Beraldo
Latest posts by Roberto Beraldo (see all)
- Não Tenha Preguiça de Ler! - 25/04/2016
- Como Atualizar Scripts PHP de MySQL Para MySQLi - 29/10/2015
- Como usar PDO com banco de dados MySQL - 10/09/2015