PHPda HTTP javob sarlavhalari bilan bog'liq muammo

HTTP qoidalariga ko'ra, avval HTTP sarlavhalari, keyin esa HTTP javob tana qismi yuboriladi. Shu sababli PHPdagi header funksiyasi bilan ishlash o'ziga xos xususiyatlarga ega.

Masala shundaki, agar bu funksiya chaqirilishidan oldin ekranga biror chiqarish (output) bo'lsa, u javob tana qismining boshlanishi deb hisoblanadi. Bunday holatda header funksiyasini chaqirish PHPda headers already sent matni bilan ogohlantirishga olib keladi. Bunda sarlavhalar hatto yuborilishi ham mumkin. Xatolik hatto ko'rinmasligi ham mumkin (PHP sozlamalariga bog'liq). Lekin ko'pincha bu faqat lokal serverda bo'ladi, sayt internetga chiqarilganda esa hammasi buzilishi mumkin.

Ekranga chiqarish deyilganda har qanday matn nazarda tutiladi. Masalan:

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

Yoki bo'sh qator:

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

Yoki probel:

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

Yoki teq:

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

Yoki echo orqali chiqarish:

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

Yoki var_dump orqali chiqarish:

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

Hatto PHP ogohlantirishlari ham ekranga chiqarish hisoblanadi. Quyidagi misolda ataylab mavjud bo'lmagan o'zgaruvchiga murojaat qilinadi, bu esa ogohlantirish chiqarishiga olib keladi:

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

PHP qavslarining ochilishi va yopilishi ham ekranga chiqarishni vujudga keltiradi:

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

header funksiyasidan oldin ataylab ekranga chiqarish yarating. Paydo bo'ladigan xatoning matnini o'rganing.

Задание 2

Ushbu kodda qilingan xatoni tuzating:

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