Probleem met HTTP-antwoordopskrifte in PHP

Volgens die HTTP-reëls word eers die HTTP-opskrifte gestuur, en dan die HTTP-antwoordliggaam. As gevolg hiervan het die werk met die funksie header in PHP sy eie kenmerke.

Die feit is dat indien daar enige uitset na die skerm is voordat hierdie funksie aangeroep word, sal dit geïnterpreteer word as die begin van die antwoordliggaam. In hierdie geval sal die oproep van die funksie header lei tot 'n PHP-waarskuwing met die teks headers already sent. Die opskrifte mag selfs dan gestuur word. Die fout mag selfs nie vertoon word nie (hang af van die PHP-instellings). Maar meestal sal dit net op die lokale masjien gebeur, en wanneer die webwerf op die internet geplaas word, sal alles breek.

Enige teks word as uitset na die skerm beskou. Byvoorbeeld, so:

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

Of 'n leë reël:

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

Of 'n spasie:

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

Of 'n etiket:

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

Of uitset deur echo:

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

Of uitset deur var_dump:

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

Selfs PHP-waarskuwings sal uitset na die skerm wees. In die volgende voorbeeld word doelbewus verwys na 'n nie-bestaande veranderlike, wat tot die uitset van 'n waarskuwing sal lei:

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

PHP-haakies wat oopbreek, skep ook uitset na die skerm:

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

Skep doelbewus uitset na die skerm voor die funksie header. Bestudeer die teks van die fout wat ontstaan.

Задание 2

Herstel die fout wat in hierdie kode gemaak is:

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