PHP жауап HTTP тақырыпшалары мәселесі
HTTP ережелері бойынша алдымен
HTTP тақырыпшалары жіберіледі, содан кейін HTTP жауабының денесі.
Осы себепті PHP-тегі header функциясымен жұмыс
ерекшеліктерге ие.
Мәселе мынада, егер бұл функцияны шақырмас бұрын
экранға қандай да бір шығарылым болса,
ол жауап денесінің басы ретінде қарастырылады.
Бұл жағдайда header функциясын шақыру
PHP-тің ескертуін тудырады, мәтіні
headers already sent.
Сонда да тақырыпшалар жіберілуі мүмкін.
Тіпті қате де шығарылмауы мүмкін (PHP баптауларына
байланысты). Бірақ көбінесе бұл тек
жергілікті серверде болады, ал сайтты интернетке шығарған кезде
бәрі бұзылады.
Экранға шығарылым деп кез келген мәтін түсініледі. Мысалы, былай:
мәтін
<?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>