Problemi me koket e përgjigjes HTTP në PHP

Sipas rregullave HTTP, së pari dërgohen koket HTTP, dhe pastaj trupi i përgjigjes HTTP. Për shkak të kësaj, puna me funksionin header në PHP ka veçoritë e veta.

Çështja është se nëse para thirrjes së këtij funksioni ka ndonjë nxjerrje në ekran, ajo do të interpretohet si fillimi i trupit të përgjigjes. Në këtë rast, thirrja e funksionit header do të çojë në një paralajmërim PHP me tekstin headers already sent. Në këtë rast, koket mund edhe të dërgohen. Mund edhe që gabimi të mos shfaqet (varet nga konfigurimet e PHP). Por më shpesh kjo do të ndodhë vetëm në serverin lokal, dhe kur faqja vendoset në internet çdo gjë do të dështojë.

Nën nxjerrje në ekran nënkuptohet çdo tekst. Për shembull, kështu:

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

Ose një rresht bosh:

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

Ose një hapësirë:

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

Ose një tag:

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

Ose nxjerrja përmes echo:

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

Ose nxjerrja përmes var_dump:

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

Edhe paralajmërimet e PHP do të jenë nxjerrje në ekran. Në shembullin vijues qëllimisht ka akses në një variabël që nuk ekziston, çka do të çojë në nxjerrjen e një paralajmërimi:

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

Thyerjet e kllapave PHP gjithashtu krijojnë nxjerrje në ekran:

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

Qëllimisht krijoni një nxjerrje në ekran para funksionit header. Studioni tekstin e gabimit që shkaktohet.

Задание 2

Korrigjoni gabimin e bërë në këtë kod:

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