PHPда HTTP жавоб сарлавҳалари муаммоси
HTTP қоидаларига кўра, аввал
HTTP сарлавҳалари юборилади, сўнг HTTP жавоб танаси.
Шу сабабдан PHPда header функцияси
билан ишлаш ўзига хос хусусиятларга эга.
Гap шу функцияни чақиришдан олдин
экранга бирондар матн чиқса,
у жавоб танасининг бошланғичи деб ҳисобланади.
Бундай ҳолда header функциясини чақириш
headers already sent матни билан
PHP огоҳлантиришига олиб келади.
Бунда сарлавҳалар юборилиши ҳам мумкин.
Ҳатто хатолик чиқмаслиги ҳам мумкин (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>