Πρόβλημα με τις επικεφαλίδες HTTP απόκρισης στην PHP

Σύμφωνα με τους κανόνες του HTTP, πρώτα στέλνονται οι επικεφαλίδες HTTP και μετά το σώμα της HTTP απόκρισης. Λόγω αυτού, η εργασία με τη συνάρτηση header στη PHP έχει τις ιδιαιτερότητές της.

Το θέμα είναι ότι αν πριν από την κλήση αυτής της συνάρτησης υπάρξει κάποια έξοδος στην οθόνη, αυτή θα ερμηνευτεί ως η αρχή του σώματος της απόκρισης. Σε αυτήν την περίπτωση, η κλήση της συνάρτησης header θα οδηγήσει σε μια προειδοποίηση της PHP με κείμενο headers already sent. Σε αυτήν την περίπτωση, οι επικεφαλίδες μπορεί ακόμη και να σταλούν. Μπορεί ακόμη και το σφάλμα να μην εμφανιστεί (εξαρτάται από τις ρυθμίσεις της PHP). Αλλά τις περισσότερες φορές αυτό συμβαίνει μόνο στοπ τοπικό περιβάλλον, ενώ όταν το site ανέβει στο διαδίκτυο όλα θα σπάσουν.

Ως έξοδος στην οθόνη νοείται οποιοδήποτε κείμενο. Για παράδειγμα, έτσι:

phpκείμενο
<?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>
    κείμενο
  <body>
<html>