Problem sa HTTP zaglavljima odgovora u PHP-u
Prema HTTP pravilima, prvo se šalju
HTTP zaglavlja, a zatim telo HTTP odgovora.
Zbog toga rad sa funkcijom header
u PHP-u ima svoje specifičnosti.
Stvar je u tome da će, ako pre poziva ove
funkcije bude bilo kakav ispis na ekran,
on biti tretiran kao početak
tela odgovora. U tom slučaju poziv
funkcije header će dovesti
do upozorenja PHP-a sa tekstom
headers already sent.
Pritom, zaglavlja možda čak i budu poslata.
Možda čak i greška neće biti prikazana (zavisi od
PHP podešavanja). Ali najčešće će ovo biti samo
na lokalnoj mašini, a kada se sajt postavi na internet
sve će se pokvariti.
Pod ispisom na ekran podrazumeva se bilo koji tekst. Na primer, ovako:
tekst
<?php
header('Content-Type: text/html');
?>
Ili prazan red:
<?php
header('Content-Type: text/html');
?>
Ili razmak:
<?php
header('Content-Type: text/html');
?>
Ili tag:
<div>
<?php
header('Content-Type: text/html');
?>
</div>
Ili ispis putem echo:
<?php
echo 'abc';
header('Content-Type: text/html');
?>
Ili ispis putem var_dump:
<?php
$str = 'abc';
var_dump($str);
header('Content-Type: text/html');
?>
Čak će i upozorenja PHP-a biti ispisi na ekran. U sledećem primeru namerno se pristupa nepostojećoj promenljivoj, što će dovesti do ispisa upozorenja:
<?php
$text += 1;
header('Content-Type: text/html');
?>
Prekidi PHP zagrada takođe generišu ispis na ekran:
<?php
echo 'abc';
?>
<?php
header('Content-Type: text/html');
?>
Namerno napravite ispis na ekran
pre funkcije header.
Proučite tekst greške koja se pojavi.
Ispravite grešku napravljenu u ovom kodu:
<!DOCTYPE html>
<html>
<head>
<?php
header('Content-Type: text/html');
?>
</head>
<body>
tekst
<body>
<html>