PHPда HTTP жавоб сарлавҳалари муаммоси

HTTP қоидаларига кўра, аввал HTTP сарлавҳалари юборилади, сўнг HTTP жавоб танаси. Шу сабабдан PHPда header функцияси билан ишлаш ўзига хос хусусиятларга эга.

Гap шу функцияни чақиришдан олдин экранга бирондар матн чиқса, у жавоб танасининг бошланғичи деб ҳисобланади. Бундай ҳолда header функциясини чақириш headers already sent матни билан PHP огоҳлантиришига олиб келади. Бунда сарлавҳалар юборилиши ҳам мумкин. Ҳатто хатолик чиқмаслиги ҳам мумкин (PHP созламаларига боғлиқ). Лекин кўпинча бу фақат локал серверда бўлади, веб-сайт интернетга чиқарилганда ҳаммаси бузилиши мумкин.

Экранга чиқариш деганда ҳар қандай матн назарда тутилади. Масалан, шундай:

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>