Проблем са заглављима HTTP одговора у PHP
По правилима HTTP прво се шаљу
HTTP заглавља, а затим тело HTTP одговора.
Због тога рад са функцијом header
у PHP има своје специфичности.
Ствар је у томе што ако пре позива ове
функције буде било каква пријава на екран,
она ће бити тумачена као почетак
тела одговора. У том случају позив
функције header довешће
до упозорења у PHP-у са текстом
headers already sent.
При том заглавља се можда ни неће послати.
Можда се ни грешка неће приказати (зависи од
подешавања PHP-a). Али најчешће ће то бити само
на локалној машини, а при објављивању сајта на интернету
све ће се покварити.
Под приказом на екран подразумева се било који текст. На пример, овако:
текст
<?php
header('Content-Type: text/html');
?>
Или празан ред:
<?php
header('Content-Type: text/html');
?>
Или размак:
<?php
header('Content-Type: text/html');
?>
Или таг:
<div>
<?php
header('Content-Type: text/html');
?>
</div>
Или приказ преко echo:
<?php
echo 'abc';
header('Content-Type: text/html');
?>
Или приказ преко var_dump:
<?php
$str = 'abc';
var_dump($str);
header('Content-Type: text/html');
?>
Чак ће и упозорења PHP-а бити прикази на екран. У следећем примеру намјерно се приступа непостојећој промјењивој, што ће довести до приказа упозорења:
<?php
$text += 1;
header('Content-Type: text/html');
?>
Раздвајање PHP заграда такође генерише приказ на екран:
<?php
echo 'abc';
?>
<?php
header('Content-Type: text/html');
?>
Намјерно направите приказ на екран
пре функције header.
Проучите текст настале грешке.
Исправите грешку допуњену у овом коду:
<!DOCTYPE html>
<html>
<head>
<?php
header('Content-Type: text/html');
?>
</head>
<body>
текст
<body>
<html>