PHP

Boas Práticas de Variáveis de Ambiente com vlucas/phpdotenv para Times Ágeis

7 min de leitura

Boas Práticas de Variáveis de Ambiente com vlucas/phpdotenv para Times Ágeis

O que são Variáveis de Ambiente? Variáveis de ambiente são pares chave-valor armazenados no sistema operacional que sua aplicação pode acessar em tempo de execução. Em vez de hardcodear credenciais, URLs de bancos de dados ou chaves de API diretamente no código, você as armazena externamente. Isso garante segurança, portabilidade entre ambientes (desenvolvimento, teste, produção) e conformidade com boas práticas como a metodologia 12-factor app. O phpdotenv é uma biblioteca PHP que carrega variáveis de um arquivo (texto simples) para o e . Ele elimina a necessidade de configurar variáveis no servidor web e permite que seu código permaneça limpo e seguro. É amplamente usado em projetos Laravel, Symfony e aplicações standalone. Instalação e Configuração Básica Instalando o phpdotenv Use o Composer para instalar a biblioteca: Criando seu arquivo .env Crie um arquivo na raiz do seu projeto: Importante: adicione ao para nunca commitá-lo no repositório. Crie um arquivo com as mesmas chaves mas valores dummy para documentar quais variáveis

<h2>O que são Variáveis de Ambiente?</h2>

<p>Variáveis de ambiente são pares chave-valor armazenados no sistema operacional que sua aplicação pode acessar em tempo de execução. Em vez de hardcodear credenciais, URLs de bancos de dados ou chaves de API diretamente no código, você as armazena externamente. Isso garante segurança, portabilidade entre ambientes (desenvolvimento, teste, produção) e conformidade com boas práticas como a metodologia 12-factor app.</p>

<p>O phpdotenv é uma biblioteca PHP que carrega variáveis de um arquivo <code>.env</code> (texto simples) para o <code>$_ENV</code> e <code>$_SERVER</code>. Ele elimina a necessidade de configurar variáveis no servidor web e permite que seu código permaneça limpo e seguro. É amplamente usado em projetos Laravel, Symfony e aplicações standalone.</p>

<h2>Instalação e Configuração Básica</h2>

<h3>Instalando o phpdotenv</h3>

<p>Use o Composer para instalar a biblioteca:</p>

<pre><code class="language-bash">composer require vlucas/phpdotenv</code></pre>

<h3>Criando seu arquivo .env</h3>

<p>Crie um arquivo <code>.env</code> na raiz do seu projeto:</p>

<pre><code>APP_NAME=MeuApp

APP_DEBUG=true

DB_HOST=localhost

DB_USER=root

DB_PASSWORD=senha123

DB_NAME=meu_banco

API_KEY=abc123def456</code></pre>

<p><strong>Importante</strong>: adicione <code>.env</code> ao <code>.gitignore</code> para nunca commitá-lo no repositório. Crie um arquivo <code>.env.example</code> com as mesmas chaves mas valores dummy para documentar quais variáveis são necessárias.</p>

<h3>Carregando as variáveis</h3>

<pre><code class="language-php">&lt;?php

require_once &#039;vendor/autoload.php&#039;;

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);

$dotenv-&gt;load();

// Acessando variáveis

echo $_ENV[&#039;APP_NAME&#039;]; // MeuApp

echo $_ENV[&#039;DB_HOST&#039;]; // localhost</code></pre>

<p>O método <code>createImmutable()</code> cria uma instância que não permite sobrescrita de variáveis já definidas no sistema, oferecendo segurança adicional. A chamada <code>load()</code> lê o arquivo <code>.env</code> e popula o ambiente.</p>

<h2>Casos de Uso Avançados</h2>

<h3>Validação de Variáveis Obrigatórias</h3>

<pre><code class="language-php">&lt;?php

require_once &#039;vendor/autoload.php&#039;;

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);

$dotenv-&gt;load();

// Garantir que variáveis críticas existem

$dotenv-&gt;required([&#039;DB_HOST&#039;, &#039;DB_USER&#039;, &#039;API_KEY&#039;])-&gt;notEmpty();

// Com mensagens customizadas

$dotenv-&gt;required(&#039;DB_PASSWORD&#039;)-&gt;notEmpty()-&gt;allowedValues([&#039;senha123&#039;, &#039;outra_senha&#039;]);</code></pre>

<p>Esse padrão previne erros silenciosos: se uma variável obrigatória estiver faltando ou vazia, uma exceção é lançada imediatamente, facilitando o debug.</p>

<h3>Múltiplos Arquivos .env</h3>

<pre><code class="language-php">&lt;?php

require_once &#039;vendor/autoload.php&#039;;

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__, [

&#039;.env&#039;,

&#039;.env.local&#039;,

&#039;.env.&#039; . getenv(&#039;APP_ENV&#039;)

]);

$dotenv-&gt;load();</code></pre>

<p>Isso permite estruturas como <code>.env.production</code>, <code>.env.testing</code> que sobrescrevem valores do <code>.env</code> base quando necessário.</p>

<h3>Casting de Tipos</h3>

<pre><code class="language-php">&lt;?php

require_once &#039;vendor/autoload.php&#039;;

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);

$dotenv-&gt;load();

// O phpdotenv retorna strings; você deve fazer conversão

$debug = getenv(&#039;APP_DEBUG&#039;) === &#039;true&#039;; // bool

$port = (int) getenv(&#039;DB_PORT&#039;); // int

$timeout = (float) getenv(&#039;REQUEST_TIMEOUT&#039;); // float

// Ou usar ternário para defaults

$max_connections = (int) (getenv(&#039;MAX_CONNECTIONS&#039;) ?: 10);</code></pre>

<p>Lembre-se: variáveis de ambiente sempre são strings. PHP não faz conversão automática, então o casting é responsabilidade do desenvolvedor.</p>

<h2>Exemplo Prático Completo</h2>

<pre><code class="language-php">&lt;?php

// config/database.php

require_once __DIR__ . &#039;/../vendor/autoload.php&#039;;

$dotenv = Dotenv\Dotenv::createImmutable(dirname(__DIR__));

$dotenv-&gt;load();

$dotenv-&gt;required([&#039;DB_HOST&#039;, &#039;DB_USER&#039;, &#039;DB_NAME&#039;])-&gt;notEmpty();

class DatabaseConnection {

private $host;

private $user;

private $password;

private $database;

private $connection;

public function __construct() {

$this-&gt;host = getenv(&#039;DB_HOST&#039;);

$this-&gt;user = getenv(&#039;DB_USER&#039;);

$this-&gt;password = getenv(&#039;DB_PASSWORD&#039;);

$this-&gt;database = getenv(&#039;DB_NAME&#039;);

}

public function connect() {

try {

$this-&gt;connection = new PDO(

&quot;mysql:host={$this-&gt;host};dbname={$this-&gt;database}&quot;,

$this-&gt;user,

$this-&gt;password,

[PDO::ATTR_ERRMODE =&gt; PDO::ERRMODE_EXCEPTION]

);

return true;

} catch (PDOException $e) {

echo &quot;Erro de conexão: &quot; . $e-&gt;getMessage();

return false;

}

}

public function query($sql, $params = []) {

$stmt = $this-&gt;connection-&gt;prepare($sql);

$stmt-&gt;execute($params);

return $stmt-&gt;fetchAll(PDO::FETCH_ASSOC);

}

}

// Uso

$db = new DatabaseConnection();

$db-&gt;connect();

$users = $db-&gt;query(&quot;SELECT * FROM users WHERE id = ?&quot;, [1]);</code></pre>

<p><strong>Arquivo .env:</strong></p>

<pre><code>DB_HOST=localhost

DB_USER=root

DB_PASSWORD=minha_senha

DB_NAME=producao_db</code></pre>

<p>Dessa forma, sua classe de banco de dados nunca tem credenciais hardcoded, e você pode manter arquivos <code>.env</code> diferentes em cada servidor.</p>

<h2>Conclusão</h2>

<p>Ao dominar o phpdotenv, você adquire três competências essenciais: <strong>segurança</strong> (credenciais nunca no código), <strong>portabilidade</strong> (mesma aplicação, ambientes diferentes) e <strong>profissionalismo</strong> (seguindo padrões da indústria). A biblioteca é simples mas poderosa — validação de variáveis e suporte a múltiplos arquivos eliminam 90% dos problemas comuns. Comece sempre validando variáveis obrigatórias e use casting explícito para tipos não-string.</p>

<h2>Referências</h2>

<ul>

<li><a href="https://github.com/vlucas/phpdotenv" target="_blank" rel="noopener noreferrer">Documentação Oficial - vlucas/phpdotenv</a></li>

<li><a href="https://12factor.net/config" target="_blank" rel="noopener noreferrer">The Twelve-Factor App - Configuration</a></li>

<li><a href="https://www.php.net/manual/en/function.getenv.php" target="_blank" rel="noopener noreferrer">PHP: getenv() - Manual Oficial</a></li>

<li><a href="https://www.php-fig.org/psr/psr-12/" target="_blank" rel="noopener noreferrer">PSR-12: Extended Coding Style Guide</a></li>

<li><a href="https://cheatsheetseries.owasp.org/cheatsheets/Secrets_Management_Cheat_Sheet.html" target="_blank" rel="noopener noreferrer">OWASP: Secrets Management</a></li>

</ul>

Comentários

Mais em PHP

Como Usar Webhooks em PHP: Recebendo e Processando Eventos Externos em Produção
Como Usar Webhooks em PHP: Recebendo e Processando Eventos Externos em Produção

O que são Webhooks e Por Que Importam Webhooks são mecanismos de comunicação...

Laravel Testes com PHPUnit e Pest: Do Básico ao Avançado
Laravel Testes com PHPUnit e Pest: Do Básico ao Avançado

PHPUnit: Fundamentos e Configuração PHPUnit é o framework de testes mais cons...

Guia Completo de GraphQL com PHP: Conceitos e Implementação Básica
Guia Completo de GraphQL com PHP: Conceitos e Implementação Básica

O que é GraphQL e por que usar com PHP GraphQL é uma linguagem de query para...