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:
text
<?php
header('Content-Type: text/html');
?>
Ose një rresht bosh:
<?php
header('Content-Type: text/html');
?>
Ose një hapësirë:
<?php
header('Content-Type: text/html');
?>
Ose një tag:
<div>
<?php
header('Content-Type: text/html');
?>
</div>
Ose nxjerrja përmes echo:
<?php
echo 'abc';
header('Content-Type: text/html');
?>
Ose nxjerrja përmes var_dump:
<?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
$text += 1;
header('Content-Type: text/html');
?>
Thyerjet e kllapave PHP gjithashtu krijojnë nxjerrje në ekran:
<?php
echo 'abc';
?>
<?php
header('Content-Type: text/html');
?>
Qëllimisht krijoni një nxjerrje në ekran
para funksionit header.
Studioni tekstin e gabimit që shkaktohet.
Korrigjoni gabimin e bërë në këtë kod:
<!DOCTYPE html>
<html>
<head>
<?php
header('Content-Type: text/html');
?>
</head>
<body>
text
<body>
<html>