Error Cannot modify header information - headers already sent di PHP
Halo semua,
Saya sedang mengembangkan sistem login menggunakan PHP native, dan saya ingin melakukan redirect ke halaman dashboard setelah login berhasil.
Kode saya seperti ini:
<?php
session_start();
$_SESSION['login'] = true;
echo "Login berhasil";
header("Location: dashboard.php");
exit;
Tapi muncul error:
Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/login.php:6)
Saya sudah baca-baca katanya karena ada output sebelum `header()` dipanggil, tapi saya belum benar-benar paham kenapa bisa begitu.
Apa penyebab utama error ini dan bagaimana cara mencegahnya dengan aman? Apakah ada best practice untuk menangani redirect di PHP tanpa bentrok dengan output?
Terima kasih sebelumnya ?2 Jawaban
Error tersebut muncul karena `header()` hanya bisa dipanggil sebelum ada output apapun ke browser.
Pada contoh kamu, `echo "Login berhasil";` menyebabkan PHP mulai mengirimkan output, jadi `header("Location: ...")` gagal.
Solusinya:
- Jangan gunakan `echo` sebelum `header()`
- Atau gunakan output buffering
Contoh perbaikan:
<?php
ob_start();
session_start();
$_SESSION['login'] = true;
header("Location: dashboard.php");
exit;
Dengan `ob_start()`, kamu bisa cegah PHP langsung kirim output ke browser sampai `ob_end_flush()` dipanggil (atau script selesai).
Cara terbaik: hindari output apapun sebelum redirect.
0
nadiaputri•1 tahun yang lalu
Saya biasa memisahkan logika dan tampilan. Jangan campur proses login langsung dengan `echo` atau HTML. Letakkan redirect di atas, baru HTML setelah semua proses aman.
Kadang juga error ini muncul karena spasi atau baris kosong di luar tag `<?php ... ?>`.
Cek juga file `functions.php` atau file lain yang di-include. Bisa jadi output muncul dari sana tanpa kamu sadari.
0
taniaokta•1 tahun yang lalu
Gunakan browser dev tools untuk lihat apakah ada output awal sebelum redirect.
Dan pastikan juga file kamu tidak ada BOM (Byte Order Mark) yang kadang muncul kalau file disimpan dari editor seperti Notepad atau VS Code tanpa UTF-8 tanpa BOM.
Saya biasa pakai VS Code dengan settingan auto-trim whitespace & save as UTF-8 no BOM untuk hindari kasus seperti ini.
0
Silahkan Login untuk menjawab.