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:

phpteks
<?php
  header('Content-Type: text/html');
?>

Atau baris kosong:

php     
<?php
  header('Content-Type: text/html');
?>

Atau spasi:

php <?php
  header('Content-Type: text/html');
?>

Atau tag:

html<div>
  <?php
    header('Content-Type: text/html');
  ?>
</div>

Atau output melalui echo:

php<?php
  echo 'abc';
  header('Content-Type: text/html');
?>

Atau output melalui var_dump:

php<?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<?php
  $text += 1;
  header('Content-Type: text/html');
?>

Pemecahan tag PHP juga menghasilkan output ke layar:

php<?php
  echo 'abc';
?>
<?php
  header('Content-Type: text/html');
?>
Задание 1

Buatlah output ke layar secara sengaja sebelum fungsi header. Pelajari teks error yang muncul.

Задание 2

Perbaiki kesalahan yang dilakukan dalam kode ini:

html<!DOCTYPE html>
<html>
  <head>
    <?php
      header('Content-Type: text/html');
    ?>
  </head>
  <body>
    teks
  <body>
<html>