Environment & Konfigurasi
Di dunia nyata, aplikasi berjalan di dua tempat berbeda: komputer developermu (development) dan server internet (production). Kedua tempat ini butuh konfigurasi yang berbeda — dan konfigurasi sensitif tidak boleh masuk ke Git.
Masalah: Konfigurasi Hardcoded
Masalah hardcoding:
- Beda di setiap environment — password di laptop vs server berbeda
- Tercatat di Git — siapapun yang akses repo bisa lihat password
- Sulit ganti — harus cari di banyak file jika password berubah
- Rawan lupa — developer baru bisa salah config
Solusi: File .env
File .env menyimpan konfigurasi dalam format KUNCI=NILAI, satu per baris:
Baca .env dari PHP
Buat file parser sederhana:
Gunakan di Konfigurasi Aplikasi
.env.example — Template untuk Tim
Buat file contoh (tanpa nilai sensitif) yang masuk Git:
.gitignore — Lindungi File Sensitif
Development vs Production
Contoh: Perilaku Berbeda per Environment
Keamanan Konfigurasi
WARNING
- ✅ File
.envtidak boleh masuk Git (ada di.gitignore) - ✅ Gunakan
.env.examplesebagai template (tanpa nilai sensitif) - ✅ Jangan hardcode password di kode PHP
- ✅ Development:
APP_DEBUG=true, Production:APP_DEBUG=false - ✅ Set
display_errors=0di production - ✅ Gunakan password database yang kuat dan unik per environment
- ✅ API keys dan secret tokens simpan di
.env, bukan di kode
Variadic Config (Opsional: Config Array)
Untuk aplikasi yang lebih besar, kelompokkan konfigurasi:
NOTE
- File
.envdi root project - Fungsi
env()danconfig()bawaan - Config files di folder
config/(database.php, mail.php, dll) - Library
vlucas/phpdotenvuntuk parsing .env
Kamu sudah belajar fondasinya!
Latihan
- Buat file
.envdan.env.exampledi root project Toko Online - Pindahkan semua hardcoded credentials ke
.env - Tambahkan
.envke.gitignore - Buat
config/app.phpyang load.envdan set error reporting berdasarkan environment - Test: ubah
APP_DEBUG=falselalu buat sengaja error — pastikan error tidak tampil di browser
Penutup
Dengan semua materi di Phase 5 ini, kamu sudah memiliki fondasi profesional untuk membangun aplikasi PHP yang:
- 🔐 Aman — password di-hash, input divalidasi, role-based access
- 🏗️ Terstruktur — front controller, routing, config terpisah
- 🆕 Modern — PHP 8.x features, type safety, immutable objects
- 🚀 Siap production — environment config, error handling yang proper
Lanjut ke Interface & Abstract Class → untuk mulai Phase 6: OOP Lanjutan sebelum masuk ke ekosistem Laravel! 🌉