PHP-də HTTP Cavab Başlıqları Problemi

HTTP qaydalarına görə, əvvəlcə HTTP başlıqları göndərilir, sonra isə HTTP cavabının gövdəsi. Buna görə də PHP-də header funksiyası ilə işin özünəməxsus xüsusiyyətləri var.

Məsələ ondadır ki, əgər bu funksiya çağırılmazdan əvvəl ekrana hər hansı bir çıxış olarsa, o, cavab gövdəsinin başlanğıcı kimi şərh ediləcək. Bu halda header funksiyasının çağırılması headers already sent mətnli PHP xəbərdarlığına səbəb olacaq. Bu zaman başlıqlar hətta göndərilə bilər. Hətta səhv də çıxmayabilər (PHP parametrlərindən asılı olaraq). Lakin çox zaman bu yalnız lokal mühitdə baş verər, sayt internetə çıxarılanda isə hər şey pozular.

Ekrana çıxış dedikdə istənilən mətn nəzərdə tutulur. Məsələn, belə:

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

Və ya boş sətir:

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

Və ya boşluq:

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

Və ya teq:

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

Və ya echo vasitəsilə çıxış:

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

Və ya var_dump vasitəsilə çıxış:

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

Hətta PHP xəbərdarlıqları da ekrana çıxış sayılacaq. Aşağıdakı nümunədə qəsdən mövcud olmayan dəyişənə müraciət edilir, bu da xəbərdarlığın çıxmasına səbəb olacaq:

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

PHP mötərizələrinin arasına başqa kod yazılması da ekrana çıxış yaradır:

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

header funksiyasından əvvəl qəsdən ekrana çıxış yaradın. Yaranan səhvin mətnini öyrənin.

Задание 2

Bu koddakı səhvi düzəldin:

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