PHPda HTTP javob sarlavhalari bilan bog'liq muammo
HTTP qoidalariga ko'ra, avval
HTTP sarlavhalari, keyin esa HTTP javob tana qismi yuboriladi.
Shu sababli PHPdagi header funksiyasi
bilan ishlash o'ziga xos xususiyatlarga ega.
Masala shundaki, agar bu funksiya chaqirilishidan oldin
ekranga biror chiqarish (output) bo'lsa,
u javob tana qismining boshlanishi deb hisoblanadi.
Bunday holatda header funksiyasini chaqirish
PHPda headers already sent matni bilan ogohlantirishga
olib keladi.
Bunda sarlavhalar hatto yuborilishi ham mumkin.
Xatolik hatto ko'rinmasligi ham mumkin (PHP sozlamalariga bog'liq).
Lekin ko'pincha bu faqat lokal serverda bo'ladi,
sayt internetga chiqarilganda esa
hammasi buzilishi mumkin.
Ekranga chiqarish deyilganda har qanday matn nazarda tutiladi. Masalan:
matn
<?php
header('Content-Type: text/html');
?>
Yoki bo'sh qator:
<?php
header('Content-Type: text/html');
?>
Yoki probel:
<?php
header('Content-Type: text/html');
?>
Yoki teq:
<div>
<?php
header('Content-Type: text/html');
?>
</div>
Yoki echo orqali chiqarish:
<?php
echo 'abc';
header('Content-Type: text/html');
?>
Yoki var_dump orqali chiqarish:
<?php
$str = 'abc';
var_dump($str);
header('Content-Type: text/html');
?>
Hatto PHP ogohlantirishlari ham ekranga chiqarish hisoblanadi. Quyidagi misolda ataylab mavjud bo'lmagan o'zgaruvchiga murojaat qilinadi, bu esa ogohlantirish chiqarishiga olib keladi:
<?php
$text += 1;
header('Content-Type: text/html');
?>
PHP qavslarining ochilishi va yopilishi ham ekranga chiqarishni vujudga keltiradi:
<?php
echo 'abc';
?>
<?php
header('Content-Type: text/html');
?>
header funksiyasidan oldin ataylab ekranga chiqarish yarating.
Paydo bo'ladigan xatoning matnini o'rganing.
Ushbu kodda qilingan xatoni tuzating:
<!DOCTYPE html>
<html>
<head>
<?php
header('Content-Type: text/html');
?>
</head>
<body>
matn
<body>
<html>