Zaki Fauzan
zakifz 1 tahun yang lalu
310 3 PHP

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

Rina Marlina
rinamarlina1 tahun yang laluJawaban Terbaik
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
Nadia Putri
nadiaputri1 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
Tania Oktaviani
taniaokta1 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.

Top Coder

Nadia Putri
nadiaputri
630 Point
Laras Ayu
larasayu
565 Point
Arif Wibowo
arifwbw
520 Point
Aulia Rizki
auliarzk
515 Point
Rizky Hidayat
rizkyhdyt
480 Point
Ilham Nurdin
ilhamnrdn
475 Point