Problem med HTTP-responsheader i PHP

I følge HTTP-reglene sendes HTTP-header først, og deretter kroppen av HTTP-svaret. På grunn av dette har arbeid med funksjonen header i PHP sine særegenheter.

Saken er at hvis det er noen utskrift til skjermen før dette funksjonskallet, vil den bli tolket som starten på svar-kroppen. I dette tilfellet vil kallet til funksjonen header føre til en PHP-advarsel med teksten headers already sent. Samtidig kan headerne til og med bli sendt. Det kan hende feilen ikke engang vises (avhenger av PHP-innstillingene). Men oftest vil dette bare være på lokal maskin, og når nettstedet lastes opp på internett vil alt gå i stykker.

Med utskrift til skjermen menes hvilken som helst tekst. For eksempel slik:

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

Eller en tom linje:

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

Eller et mellomrom:

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

Eller en tagg:

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

Eller utskrift via echo:

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

Eller utskrift via var_dump:

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

Selv PHP-advarsler vil være utskrifter til skjermen. I det følgende eksemplet henvises det med vilje til en ikke-eksisterende variabel, noe som vil føre til utskrift av en advarsel:

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

Inndelinger av PHP-klammeparenteser genererer også utskrift til skjermen:

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

Skap med vilje en utskrift til skjermen før funksjonen header. Studer teksten til feilen som oppstår.

Задание 2

Korriger feilen som er begått i denne koden:

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