Праблема з загалоўкамі HTTP адказу ў PHP

Па правілах HTTP спачатку адпраўляюцца HTTP загалоўкі, а потым цела HTTP адказу. З-за гэтага праца з функцыяй header у PHP мае свае асаблівасці.

Справа ў тым, што калі перад выклікам гэтай функцыі будзе які-небудзь вывод на экран, ён будзе трактавацца як пачатак цела адказу. У гэтым выпадку выклік функцыі header прывядзе да папярэджання PHP з тэкстам headers already sent. Пры гэтым загалоўкі можа нават і адпраўяцца. Можа нават і памылка не выйдзе (залежыць ад наладаў PHP). Але часцей за ўсё гэта будзе толькі на лакалцы, а пры выкладцы сайта ў інтэрнэт усё паламаецца.

Пад вывадам на экран разумеецца любы тэкст. Напрыклад, так:

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

Ці пусты радок:

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

Ці прабел:

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

Ці тэг:

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

Ці вывод праз echo:

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

Ці вывод праз var_dump:

php<?php
  $str = 'abc';
  var_dump($str);
  
  header('Content-Type: text/html');
?>

Нават папярэджанні PHP будуць вывадамі на экран. У наступным прыкладзе наўмысна ідзе зварот да неіснуючай зменнай, што прывядзе да вываду папярэджання:

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

Разрывы PHP дужак таксама параджаюць вывод на экран:

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

Наўмысна стварыце вывод на экран перад функцыяй header. Вывучыце тэкст якая ўзнікае памылкі.

Задание 2

Выпраўце памылку, дапушчаную ў гэтым кодзе:

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