Problema con las cabeceras de respuesta HTTP en PHP

Según las reglas de HTTP, primero se envían las cabeceras HTTP y luego el cuerpo de la respuesta HTTP. Debido a esto, trabajar con la función header en PHP tiene sus peculiaridades.

El problema es que si hay alguna salida a la pantalla antes de llamar a esta función, se interpretará como el inicio del cuerpo de la respuesta. En este caso, la llamada a la función header llevará a una advertencia de PHP con el texto headers already sent. Incluso puede que las cabeceras se envíen. Puede que ni siquiera se muestre el error (depende de la configuración de PHP). Pero la mayoría de las veces esto solo pasará en el entorno local, y al desplegar el sitio en internet todo se romperá.

Por salida a la pantalla se entiende cualquier texto. Por ejemplo, así:

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

O una línea vacía:

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

O un espacio:

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

O una etiqueta:

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

O salida mediante echo:

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

O salida mediante var_dump:

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

Incluso las advertencias de PHP serán salidas a la pantalla. En el siguiente ejemplo se accede intencionadamente a una variable inexistente, lo que llevará a la salida de una advertencia:

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

La ruptura de las etiquetas de PHP también genera salida a la pantalla:

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

Cree intencionadamente una salida a la pantalla antes de la función header. Estudie el texto del error que se produce.

Задание 2

Corrija el error cometido en este código:

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