Problēma ar HTTP atbildes galvenēm PHP

Saskaņā ar HTTP noteikumiem vispirms tiek nosūtītas HTTP galvenes un tad HTTP atbildes saturs. Šī iemesla dēļ darbam ar funkciju header PHP ir savas īpatnības.

Lieta tāda, ka, ja pirms šīs funkcijas izsaukšanas būs kāda izvade uz ekrānu, tā tiks interpretēta kā atbildes satura sākums. Šajā gadījumā funkcijas header izsaukšana novedīs pie PHP brīdinājuma ar tekstu headers already sent. Tomēr, iespējams, ka galvenes pat tiks nosūtītas. Iespējams, ka pat kļūda netiks parādīta (atkarīgs no PHP iestatījumiem). Bet visbiežāk tas notiks tikai lokālajā vidē, bet, izvietojot vietni internetā, vis sabojāsies.

Ar izvadi uz ekrānu saprot jebkuru tekstu. Piemēram, šādi:

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

Vai tukša rinda:

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

Vai atstarpe:

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

Vai tags:

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

Vai izvade ar echo:

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

Vai izvade ar var_dump:

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

Pat PHP brīdinājumi būs izvade uz ekrānu. Nākamajā piemērā tīši tiek piekļūts neesošam mainīgajam, kas novedīs pie brīdinājuma izvades:

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

PHP iekavu pārtraukumi arī rada izvadi uz ekrānu:

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

Tīši izveidojiet izvadi uz ekrānu pirms funkcijas header. Izpētiet radušās kļūdas tekstu.

Задание 2

Izlabojiet kļūdu, kas pieļauta šajā kodā:

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