PHP Environment Dotenv Config Per Env Security No Commit Secret
Definisi
.env menyimpan variabel environment (DB, API key, mode) terpisah dari kode. Library vlucas/phpdotenv memuatnya ke $_ENV/getenv(). Tujuannya: rahasia tak hardcode & konfigurasi beda antara dev/staging/prod.
Kapan dipakai
Selalu untuk aplikasi nyata. Jangan taruh credential di source code atau commit ke git. Untuk Laravel, .env sudah bawaan (tanpa library ekstra).
Cara kerja
.env
APP_ENV=local
DB_HOST=127.0.0.1
DB_PASS=[REDACTED]Load (non-Laravel)
use Dotenv\Dotenv;
Dotenv::createImmutable(__DIR__)->load();
$db = getenv('DB_HOST');Akses (Laravel)
config('database.connections.mysql.host'); // dari env(DB_HOST)Struktur alur
Loading diagram...
Catatan implementasi
.envHARUS di.gitignore; jangan pernah commit secret (aturan tu: ganti[REDACTED])..env.exampleboleh di-commit sebagai template tanpa nilai nyata.- Jangan panggil
env()di luar config setelah boot (Laravel cache config). - Di produksi, set env via platform (Vercel, server) daripada file bila memungkinkan.
Kesalahan umum
- Commit .env: kebocoran rahasia; rotate credential segera.
- Hardcode fallback secret:
env('KEY', 'secret')di production berbahaya. - Cache config sambil pakai env(): nilai kosong; pakai
config:cachehanya setelah env stabil. - Satu .env semua env: bedakan dev/prod; jangan pakai prod secret di lokal.