Tatizo na Vichwa vya Majibu ya HTTP katika PHP
Kulingana na sheria za HTTP, kwanza hutumwa
vichwa vya HTTP, kisha mwili wa majibu ya HTTP.
Kwa sababu hii, kufanya kazi na kitendakazi header
katika PHP ina sifa zake maalum.
Jambo ni kwamba ikiwa kabla ya kuita
kitendakazi hiki kutakuwa na mazao yoyote kwenye skrini,
yatatafsiriwa kama mwanzo
wa mwili wa majibu. Katika kesi hii, kuita
kitendakazi header kutasababisha
onyo la PHP lenye maandishi
headers already sent.
Wakati huo huo, vichwa vinaweza hata kutuma.
Hata hitilafu inaweza isitoke (inategemea
mipangilio ya PHP). Lakini mara nyingi hii itakuwa tu
kwenye mtandao wa ndani, na wakati tovuti itakapowekwa kwenye wavuti
kila kitu kitiharibika.
Kwa mazao kwenye skrini inamaanishwa maandishi yoyote. Kwa mfano, hivi:
maandishi
<?php
header('Content-Type: text/html');
?>
Au mstari tupu:
<?php
header('Content-Type: text/html');
?>
Au nafasi:
<?php
header('Content-Type: text/html');
?>
Au tagi:
<div>
<?php
header('Content-Type: text/html');
?>
</div>
Au mazao kupitia echo:
<?php
echo 'abc';
header('Content-Type: text/html');
?>
Au mazao kupitia var_dump:
<?php
$str = 'abc';
var_dump($str);
header('Content-Type: text/html');
?>
Hata onyo la PHP litakuwa mazao kwenye skrini. Katika mfano ufuatao kwa makusudi kuna mawasiliano na mabadiliko yasiyopo, ambayo itasababisha mazao ya onyo:
<?php
$text += 1;
header('Content-Type: text/html');
?>
Kuvunja mabano ya PHP pia hutengeneza mazao kwenye skrini:
<?php
echo 'abc';
?>
<?php
header('Content-Type: text/html');
?>
Kwa makusudi unda mazao kwenye skrini
kabla ya kitendakazi header.
Chunguza maandishi ya hitilafu inayojitokeza.
Sahihisha hitilafu, iliyofanywa katika msimbo huu:
<!DOCTYPE html>
<html>
<head>
<?php
header('Content-Type: text/html');
?>
</head>
<body>
maandishi
<body>
<html>