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ácil | Com a instalação de um pacote através do composer, seu projeto já está pronto para utilizá-las |
É seguro | O 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. |
É simples | Cada desenvolvedor pode ter o seu próprio .env, sem se preocupar com o .env do colega, evitando problemas de conflito entre programadores |
É prático | Com 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