HTTP vastuse päiste probleem PHP-s
Vastavalt HTTP reeglitele saadetakse kõigepealt
HTTP päised ja seejärel HTTP vastuse keha.
Seetõttu on funktsiooni header
töötamisel PHP-s oma eripärad.
Asi on selles, et kui enne selle
funktsiooni väljakutset on ekraanile midagi
välja prinditud, siis seda tõlgendatakse
vastuse keha algusena. Sel juhul põhjustab
funktsiooni header kutsumine
PHP hoiatusse tekstitaga
headers already sent.
Samal ajal võivad päised isegi saata.
Võib isegi olla, et viga ei kuvata (sõltub
PHP seadistustest). Kuid enamasti juhtub see ainult
kohalikus keskkonnas, kui veebisait internetis avaldatakse,
kõik läheb katki.
Ekraanile väljundina loetakse suvalist teksti. Näiteks nii:
tekst
<?php
header('Content-Type: text/html');
?>
Või tühi rida:
<?php
header('Content-Type: text/html');
?>
Või tühik:
<?php
header('Content-Type: text/html');
?>
Või silt:
<div>
<?php
header('Content-Type: text/html');
?>
</div>
Või väljund echo kaudu:
<?php
echo 'abc';
header('Content-Type: text/html');
?>
Või väljund var_dump kaudu:
<?php
$str = 'abc';
var_dump($str);
header('Content-Type: text/html');
?>
Isegi PHP hoiatusi loetakse ekraanile väljundiks. Järgmises näites viidake tahtlikult olematule muutujale, mis põhjustab hoiatuse kuvamise:
<?php
$text += 1;
header('Content-Type: text/html');
?>
PHP sulgude vahele jääv tühi ruum loetakse samuti ekraanile väljundiks:
<?php
echo 'abc';
?>
<?php
header('Content-Type: text/html');
?>
Loo tahtlikult ekraanile väljund
enne funktsiooni header.
Uuri tekkiva vea teksti.
Paranda selles koodis tehtud viga:
<!DOCTYPE html>
<html>
<head>
<?php
header('Content-Type: text/html');
?>
</head>
<body>
tekst
<body>
<html>