Table of Contents

Masalah

Saat menjalankan skrip PHP, di browser muncul pesan kesalahan dengan teks “headers already sent”, contoh:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already 
sent by (output started at /home/sloki/user/t10000/sites/example.com/www/index.php:5

Penjelasan/solusi

Skrip PHP Anda telah “mencetak sesuatu”. Seperti diketahui, dalam sebuah respon HTTP, header harus dikirim sebelum bodi. Jadi jika sudah mencetak sesuatu (ke bodi), maka header juga pasti sudah dikirimkan oleh PHP sebelum bodi. Sehingga hal-hal yang ingin kita lakukan yang melibatkan perubahan di header HTTP, misalnya mengeset cookie, session, mengirimkan header tambahan seperti Location, dll tidak lagi bisa dilakukan.

“Mencetak sesuatu” ini bisa karena Anda sengaja/tidak sengaja memberikan perintah echo atau print, atau ada kesalahan/warning dalam skrip sehingga PHP mencetak pesan kesalahan/warning, atau bisa juga karena ada baris kosong atau kode HTML yang ada di file sebelum skrip PHP Anda. Karena itu pastikanlah bahwa tag pembuka skrip PHP:

<?php

ada di baris pertama kolom pertama. Jangan ada teks lain atau baris kosong sebelumnya.

Alternatif solusi lain adalah menghidupkan output buffering, sebuah fitur di PHP yang menyebabkan PHP menyimpan dulu di buffer semua perintah mencetak ke bodi sampai skrip PHP selesai (atau sampai PHP disuruh secara eksplisit untuk memflush buffer). Dengan cara ini, kita dapat mengeset header sesudah perintah echo, karena perintah echo kita akan dibuffer dulu.

Cara menghidupkan output buffering adalah dengan menaruh baris fungsi ob_start(); di awal skrip Anda (sebelum semua output lain tentunya) atau menaruh baris:

output_buffering=1

di php.ini Anda.