PHP,  Tutoriais

Utilizando o .env em seus projetos


Warning: DOMDocument::loadHTML(): Tag template invalid in Entity, line: 12 in /home/samu/public_html/blog/wp-content/plugins/gistpress-master/includes/class-gistpress.php on line 473

Warning: DOMDocument::loadHTML(): Tag svg invalid in Entity, line: 14 in /home/samu/public_html/blog/wp-content/plugins/gistpress-master/includes/class-gistpress.php on line 473

Warning: DOMDocument::loadHTML(): Tag path invalid in Entity, line: 15 in /home/samu/public_html/blog/wp-content/plugins/gistpress-master/includes/class-gistpress.php on line 473

Warning: DOMDocument::loadHTML(): Tag template invalid in Entity, line: 27 in /home/samu/public_html/blog/wp-content/plugins/gistpress-master/includes/class-gistpress.php on line 473

Warning: DOMDocument::loadHTML(): Tag svg invalid in Entity, line: 29 in /home/samu/public_html/blog/wp-content/plugins/gistpress-master/includes/class-gistpress.php on line 473

Warning: DOMDocument::loadHTML(): Tag path invalid in Entity, line: 30 in /home/samu/public_html/blog/wp-content/plugins/gistpress-master/includes/class-gistpress.php on line 473

Warning: DOMDocument::loadHTML(): Tag template invalid in Entity, line: 12 in /home/samu/public_html/blog/wp-content/plugins/gistpress-master/includes/class-gistpress.php on line 473

Warning: DOMDocument::loadHTML(): Tag svg invalid in Entity, line: 14 in /home/samu/public_html/blog/wp-content/plugins/gistpress-master/includes/class-gistpress.php on line 473

Warning: DOMDocument::loadHTML(): Tag path invalid in Entity, line: 15 in /home/samu/public_html/blog/wp-content/plugins/gistpress-master/includes/class-gistpress.php on line 473

Warning: DOMDocument::loadHTML(): Tag template invalid in Entity, line: 27 in /home/samu/public_html/blog/wp-content/plugins/gistpress-master/includes/class-gistpress.php on line 473

Warning: DOMDocument::loadHTML(): Tag svg invalid in Entity, line: 29 in /home/samu/public_html/blog/wp-content/plugins/gistpress-master/includes/class-gistpress.php on line 473

Warning: DOMDocument::loadHTML(): Tag path invalid in Entity, line: 30 in /home/samu/public_html/blog/wp-content/plugins/gistpress-master/includes/class-gistpress.php on line 473

Warning: DOMDocument::loadHTML(): Tag template invalid in Entity, line: 12 in /home/samu/public_html/blog/wp-content/plugins/gistpress-master/includes/class-gistpress.php on line 473

Warning: DOMDocument::loadHTML(): Tag svg invalid in Entity, line: 14 in /home/samu/public_html/blog/wp-content/plugins/gistpress-master/includes/class-gistpress.php on line 473

Warning: DOMDocument::loadHTML(): Tag path invalid in Entity, line: 15 in /home/samu/public_html/blog/wp-content/plugins/gistpress-master/includes/class-gistpress.php on line 473

Warning: DOMDocument::loadHTML(): Tag template invalid in Entity, line: 27 in /home/samu/public_html/blog/wp-content/plugins/gistpress-master/includes/class-gistpress.php on line 473

Warning: DOMDocument::loadHTML(): Tag svg invalid in Entity, line: 29 in /home/samu/public_html/blog/wp-content/plugins/gistpress-master/includes/class-gistpress.php on line 473

Warning: DOMDocument::loadHTML(): Tag path invalid in Entity, line: 30 in /home/samu/public_html/blog/wp-content/plugins/gistpress-master/includes/class-gistpress.php on line 473

Diarimente lidamos com diversos servidores, e diversos desenvolvedores trabalhando em um mesmo códigos, com máquinas diferentes, senhas diferentes e configurações locais também diferentes.

Existem várias formas de se controlar isso, e uma delas é criar 1 arquivo de configuração, e não adicioná-lo ao projeto, através do gitignore, mas seria essa a melhor solução ?

Tire suas próprias conclusões após a leitura desse post, e caso seja interessante, adote em seus projetos.

As vantagens de se utilizar um arquivo de ambiente ao invés do tradicional arquivo de configuração são:

Porque ?Motivo
É fácilCom a instalação de um pacote através do composer, seu projeto já está pronto para utilizá-las
É seguroO arquivo .env pode ficar fora do seu diretório web, ficando virtualmente impossível acessá-lo de outra forma que não a controlada pelo seu próprio sistema.
É simplesCada desenvolvedor pode ter o seu próprio .env, sem se preocupar com o .env do colega, evitando problemas de conflito entre programadores
É práticoCom o que iremos mostrar, você pode criar diversas variáveis, sem a necessidade de alterar seu programa.

Vamos a prática.

A primeira coisa que precisamos fazer é instalar um pacote, através do composer, de uma biblioteca que abstrai o parseamento desses arquivos .env

composer require vlucas/phpdotenv

Após a instalação ser concluída, você terá uma nova pasta, chamada de vendor, e dentro dela um arquivo, chamado de autoload.php. Esse arquivo precisa ser requerido em todas as páginas onde seja necessário a leitura desses arquivos .env

Em um fluxo legal de trabalho, o que faremos agora é criar 1 arquivo .env.dist e esse sim será comitado no repositório (e não o .env em si, porque ele vai ter chaves que não podem ser compartilhadas, senhas de banco de dados, chaves de paypal, amazon, pagseguro, etc).

Dessa forma qualquer modificação nesse arquivo será exibida no diff do git, e os programadores saberão que uma nova variável de ambiente precisa ser criada. Faça assim:

# Cria o arquivo vazio.
touch .env.dist
# Adicione a pasta vendor e o .env no seu .gitignore para não ser comitado no repositório.
echo "/vendor/*" > .gitignore
echo ".env" >> .gitignore
# Edite o .env.dist no sublime (ou seu editor predileto)
subl .env.dist
# Após a edição do arquivo, copie ele para o .env (gerando dessa forma o arquivo)
cp .env.dist .env

Com o arquivo .env já criado, vamos a sua utilização em nosso programa.

<?PHP
require('vendor/autoload.php');
$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->load();
echo "\n<pre>Todas as variáveis de ambiente\n";
print_r($_ENV);
echo "\nPara pegar uma variável específica\n";
echo sprintf("Nome do banco de dados:%s", getenv('DB_DATABASE'));
echo "\n</pre>";

Lembrando que você não pode sobrescrever essas variáveis de ambiente (não adianta criar 1 PATH dentro do seu .env). Caso queira ver outras funcionalidades, visite o repositório do criador do mesmo, para ver todas as opções.

Outro ponto a se considerar, não deixe seu .env na pasta public_html pois o mesmo pode ser lido do próprio browser, coloque ele em outra pasta sem acesso pelo apache/nginx e leia o mesmo pelo php


Notice: ob_end_flush(): failed to send buffer of zlib output compression (0) in /home/samu/public_html/blog/wp-includes/functions.php on line 5277