Header already sent foutmelding
30-09-2009 22:43
Offline Stuur privëbericht
I love music, and you?
Berichten: 1288

Vooral beginners met PHP hebben vaak last van fouten met headers. Meestal treedt bij fouten met headers de welbekende fout 'header's already sent op. Waarom treedt deze fout op en hoe los je dit op?

Wat zijn headers?
Een header is een regel met informatie die met de pagina die wordt opgevraagd, wordt meegezonden. Een header kan bijvoorbeeld informatie bevatten over wanneer de pagina gewijzigd is, welke PHP versie er op de server staat, maar ook cookies worden geplaatst op de computer van de gebruiker door middel van headers. De header van een pagina kan er als volgt uitzien:


HTTP/1.1 200 OK
Date: Sat, 27 Sep 2003 07:05:29 GMT
Server: Apache
X-Powered-By: PHP/4.3.2
Last-Modified: Sat, 27 Sep 2003 07:05:29 GMT
Connection: close
Content-Type: text/html



Wanneer moeten headers worden geplaatst?
Als je zelf met de functie header() of setcookie() in PHP headers wilt plaatsen, moet je ervoor zorgen dat dit begint voordat er informatie op de pagina gezet wordt, zoals een tekst met echo() of gewone HTML codes. Hieronder enkele foute en goede voorbeelden:

Fout voorbeeld 1:


<?php

echo(\\"Hier begint mijn pagina\\"
setcookie(\\"Mijncookie\\",\\"Mijnwaarde\\"
// Plaats een cookie (zal niet werken)

?>


Fout voorbeeld 2:


<html>
<?php

header(\\"Location: http://www.criminalspoint.com/home.html/\\"
// Stuur de bezoeker naar CP (zal niet werken)

?>


Goed voorbeeld 1:


<?php

header(\\"Location: http://www.criminalspoint.com/home.html/\\"
// Stuur de bezoeker naar CP

echo(\\"<html> ... \\"

?>



Goed voorbeeld 2:



<?php

setcookie(\\"Mijncookie\\",\\"Mijnwaarde\\"
// Plaats een cookie

?>
Welkom op mijn pagina!


Hoe los ik de fouten op?
Als je de fout \'headers already sent\' krijgt, moet je iets veranderen aan je pagina. Je hebt waarschijnlijk al informatie op de pagina gezet voordat je header() of setcookie() gebruikte. Dit is makkelijk op te lossen door deze codes naar boven op je pagina te verplaatsen.

Maar soms is dit niet mogelijk, bijvoorbeeld omdat je bepaalde scripts gebruikt die pas in het midden van je pagina worden geïncludeerd. Ook hier is een oplossing voor. Met Output Control functies in PHP kun je eerst alle informatie en headers neerzetten en dan pas alles naar de bezoeker doorsturen. Dan zul je geen fouten krijgen. De functies die je hiervoor gebruikt zijn ob_start() en ob_end_flush(). Hieronder een voorbeeld:


<?php

ob_start();

echo(\\"Deze pagina wordt zonder fouten doorgestuurd!\\"
header(\\"Location: http://www.criminalspoint.com/home.html\\"

ob_end_flush();

?>


Succes ermee!
Er werd nog geen reactie geplaatst.