HTTP vastuse päiste probleem PHP-s

Vastavalt HTTP reeglitele saadetakse kõigepealt HTTP päised ja seejärel HTTP vastuse keha. Seetõttu on funktsiooni header töötamisel PHP-s oma eripärad.

Asi on selles, et kui enne selle funktsiooni väljakutset on ekraanile midagi välja prinditud, siis seda tõlgendatakse vastuse keha algusena. Sel juhul põhjustab funktsiooni header kutsumine PHP hoiatusse tekstitaga headers already sent. Samal ajal võivad päised isegi saata. Võib isegi olla, et viga ei kuvata (sõltub PHP seadistustest). Kuid enamasti juhtub see ainult kohalikus keskkonnas, kui veebisait internetis avaldatakse, kõik läheb katki.

Ekraanile väljundina loetakse suvalist teksti. Näiteks nii:

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

Või tühi rida:

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

Või tühik:

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

Või silt:

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

Või väljund echo kaudu:

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

Või väljund var_dump kaudu:

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

Isegi PHP hoiatusi loetakse ekraanile väljundiks. Järgmises näites viidake tahtlikult olematule muutujale, mis põhjustab hoiatuse kuvamise:

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

PHP sulgude vahele jääv tühi ruum loetakse samuti ekraanile väljundiks:

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

Loo tahtlikult ekraanile väljund enne funktsiooni header. Uuri tekkiva vea teksti.

Задание 2

Paranda selles koodis tehtud viga:

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