Probleem met HTTP-antwoordheaders in PHP
Volgens de HTTP-regels worden eerst de
HTTP-headers verzonden en daarna de body van het HTTP-antwoord.
Hierdoor heeft het werken met de functie header
in PHP zijn eigen eigenaardigheden.
Het punt is dat als er enige uitvoer naar het scherm is
vóór de aanroep van deze functie,
dit wordt geïnterpreteerd als het begin
van de antwoordbody. In dit geval zal de aanroep
van de functie header leiden
tot een PHP-waarschuwing met de tekst
headers already sent.
Desondanks kunnen de headers zelfs worden verzonden.
De fout wordt mogelijk niet eens weergegeven (afhankelijk van de
PHP-instellingen). Maar meestal zal dit alleen
op de lokale omgeving gebeuren, en wanneer de site online wordt gezet
zal alles breken.
Onder uitvoer naar het scherm wordt elke tekst verstaan. Bijvoorbeeld zo:
tekst
<?php
header('Content-Type: text/html');
?>
Of een lege regel:
<?php
header('Content-Type: text/html');
?>
Of een spatie:
<?php
header('Content-Type: text/html');
?>
Of een tag:
<div>
<?php
header('Content-Type: text/html');
?>
</div>
Of uitvoer via echo:
<?php
echo 'abc';
header('Content-Type: text/html');
?>
Of uitvoer via var_dump:
<?php
$str = 'abc';
var_dump($str);
header('Content-Type: text/html');
?>
Zelfs PHP-waarschuwingen zijn uitvoer naar het scherm. In het volgende voorbeeld wordt opzettelijk verwezen naar een niet-bestaande variabele, wat leidt tot de weergave van een waarschuwing:
<?php
$text += 1;
header('Content-Type: text/html');
?>
Onderbrekingen van PHP-haakjes genereren ook uitvoer naar het scherm:
<?php
echo 'abc';
?>
<?php
header('Content-Type: text/html');
?>
Creëer opzettelijk uitvoer naar het scherm
vóór de functie header.
Bestudeer de tekst van de optredende fout.
Repareer de fout die gemaakt is in deze code:
<!DOCTYPE html>
<html>
<head>
<?php
header('Content-Type: text/html');
?>
</head>
<body>
tekst
<body>
<html>