Probleem met HTTP-antwoordopskrifte in PHP
Volgens die HTTP-reëls word eers die
HTTP-opskrifte gestuur, en dan die HTTP-antwoordliggaam.
As gevolg hiervan het die werk met die funksie header
in PHP sy eie kenmerke.
Die feit is dat indien daar enige uitset na die skerm is
voordat hierdie funksie aangeroep word,
sal dit geïnterpreteer word as die begin
van die antwoordliggaam. In hierdie geval sal die oproep
van die funksie header lei
tot 'n PHP-waarskuwing met die teks
headers already sent.
Die opskrifte mag selfs dan gestuur word.
Die fout mag selfs nie vertoon word nie (hang af van die
PHP-instellings). Maar meestal sal dit net
op die lokale masjien gebeur, en wanneer die webwerf op die internet geplaas word,
sal alles breek.
Enige teks word as uitset na die skerm beskou. Byvoorbeeld, so:
teks
<?php
header('Content-Type: text/html');
?>
Of 'n leë reël:
<?php
header('Content-Type: text/html');
?>
Of 'n spasie:
<?php
header('Content-Type: text/html');
?>
Of 'n etiket:
<div>
<?php
header('Content-Type: text/html');
?>
</div>
Of uitset deur echo:
<?php
echo 'abc';
header('Content-Type: text/html');
?>
Of uitset deur var_dump:
<?php
$str = 'abc';
var_dump($str);
header('Content-Type: text/html');
?>
Selfs PHP-waarskuwings sal uitset na die skerm wees. In die volgende voorbeeld word doelbewus verwys na 'n nie-bestaande veranderlike, wat tot die uitset van 'n waarskuwing sal lei:
<?php
$text += 1;
header('Content-Type: text/html');
?>
PHP-haakies wat oopbreek, skep ook uitset na die skerm:
<?php
echo 'abc';
?>
<?php
header('Content-Type: text/html');
?>
Skep doelbewus uitset na die skerm
voor die funksie header.
Bestudeer die teks van die fout wat ontstaan.
Herstel die fout wat in hierdie kode gemaak is:
<!DOCTYPE html>
<html>
<head>
<?php
header('Content-Type: text/html');
?>
</head>
<body>
teks
<body>
<html>