Masalah dengan Header Respons HTTP di PHP
Menurut aturan HTTP, yang pertama dikirim adalah
header HTTP, baru kemudian badan respons HTTP.
Karena ini, bekerja dengan fungsi header
di PHP memiliki kekhasannya sendiri.
Masalahnya adalah, jika sebelum pemanggilan
fungsi ini ada output apa pun ke layar,
output itu akan ditafsirkan sebagai awal
dari badan respons. Dalam hal ini, pemanggilan
fungsi header akan menyebabkan
peringatan PHP dengan teks
headers already sent.
Bahkan, header mungkin masih terkirim.
Bahkan, error mungkin tidak ditampilkan (tergantung pada
pengaturan PHP). Namun seringkali ini hanya terjadi
di lingkungan lokal, dan saat situs web diunggah ke internet
semua akan rusak.
Yang dimaksud dengan output ke layar adalah teks apa pun. Misalnya, seperti ini:
teks
<?php
header('Content-Type: text/html');
?>
Atau baris kosong:
<?php
header('Content-Type: text/html');
?>
Atau spasi:
<?php
header('Content-Type: text/html');
?>
Atau tag:
<div>
<?php
header('Content-Type: text/html');
?>
</div>
Atau output melalui echo:
<?php
echo 'abc';
header('Content-Type: text/html');
?>
Atau output melalui var_dump:
<?php
$str = 'abc';
var_dump($str);
header('Content-Type: text/html');
?>
Bahkan peringatan PHP akan menjadi output ke layar. Dalam contoh berikut, sengaja dilakukan akses ke variabel yang tidak ada, yang akan menyebabkan output peringatan:
<?php
$text += 1;
header('Content-Type: text/html');
?>
Pemecahan tag PHP juga menghasilkan output ke layar:
<?php
echo 'abc';
?>
<?php
header('Content-Type: text/html');
?>
Buatlah output ke layar secara sengaja
sebelum fungsi header.
Pelajari teks error yang muncul.
Perbaiki kesalahan yang dilakukan dalam kode ini:
<!DOCTYPE html>
<html>
<head>
<?php
header('Content-Type: text/html');
?>
</head>
<body>
teks
<body>
<html>