Праблема з загалоўкамі HTTP адказу ў PHP
Па правілах HTTP спачатку адпраўляюцца
HTTP загалоўкі, а потым цела HTTP адказу.
З-за гэтага праца з функцыяй header
у PHP мае свае асаблівасці.
Справа ў тым, што калі перад выклікам гэтай
функцыі будзе які-небудзь вывод на экран,
ён будзе трактавацца як пачатак
цела адказу. У гэтым выпадку выклік
функцыі header прывядзе
да папярэджання PHP з тэкстам
headers already sent.
Пры гэтым загалоўкі можа нават і адпраўяцца.
Можа нават і памылка не выйдзе (залежыць ад
наладаў PHP). Але часцей за ўсё гэта будзе толькі
на лакалцы, а пры выкладцы сайта ў інтэрнэт
усё паламаецца.
Пад вывадам на экран разумеецца любы тэкст. Напрыклад, так:
text
<?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>
text
<body>
<html>