Elke keer dat een browser een pagina opvraagt, stuurt de server een antwoord (response). Dat antwoord bestaat uit twee delen: de headers (metadata) en de body (de HTML). Met de header()-functie in PHP kun je deze headers aanpassen.
De meest voorkomende toepassingen:
<?php
// Redirect naar een andere pagina
header("Location: welkom.php");
exit;
?>
Belangrijk: Net als bij cookies en sessions moet header() worden aangeroepen VOORDAT er output naar de browser wordt gestuurd. Zelfs een spatie of lege regel voor <?php kan problemen veroorzaken.
Gebruik ALTIJD exit of die na een header("Location: ...") redirect. Zonder exit gaat je PHP-code gewoon door met uitvoeren, wat onverwacht gedrag of beveiligingsproblemen kan veroorzaken.
Let op: In de oefeningen hieronder hoef je GEEN <?php en ?> tags te typen. Het platform regelt dit automatisch. Je typt alleen de PHP-code zelf.
Schrijf een redirect naar "login.php" met header(). Voeg daarna exit toe. (In deze oefening wordt de redirect niet echt uitgevoerd, maar de code moet correct zijn.) Toon voor de header de tekst "Doorsturen...".
Schrijf een functie stuurDoor($url) die een redirect uitvoert naar de opgegeven URL en daarna stopt met exit. Roep de functie aan met "dashboard.php". Toon eerst "Redirect naar dashboard.php".
Simuleer een logincontrole. Maak een variabele $ingelogd met waarde false. Als de gebruiker NIET is ingelogd, toon "Niet ingelogd, doorsturen...". In een echt script zou je daarna header("Location: login.php") en exit gebruiken.
Met http_response_code() of header() kun je statuscodes instellen. De belangrijkste:
| Code | Betekenis | Gebruik |
|------|-----------|---------|
| 200 | OK | Standaard, alles is goed |
| 301 | Moved Permanently | Permanente redirect |
| 302 | Found | Tijdelijke redirect (standaard bij Location) |
| 403 | Forbidden | Geen toegang |
| 404 | Not Found | Pagina niet gevonden |
| 500 | Internal Server Error | Serverfout |
<?php
// 404-pagina
http_response_code(404);
echo "Pagina niet gevonden";
// Permanente redirect
header("Location: nieuwe-pagina.php", true, 301);
exit;
?>
Stel de HTTP-statuscode in op 404 met http_response_code() en toon "Pagina niet gevonden".
Schrijf een functie toonFout($code) die de juiste statuscode instelt en een bericht toont. Code 403 toont "Toegang geweigerd", code 404 toont "Niet gevonden", code 500 toont "Serverfout". Test met toonFout(403).
Schrijf een functie controleerToegang($rol) die controleert of de rol "admin" is. Zo ja, toon "Welkom, admin". Zo nee, stel statuscode 403 in en toon "Toegang geweigerd". Test met de rol "gebruiker".
Met de Content-Type-header vertel je de browser wat voor soort data je stuurt. Standaard is dit text/html, maar je kunt ook JSON, platte tekst of andere formaten sturen.
<?php
// JSON-response
header("Content-Type: application/json");
echo json_encode(["status" => "ok", "bericht" => "Data opgeslagen"]);
// Platte tekst
header("Content-Type: text/plain");
echo "Dit is platte tekst";
?>
Stel de Content-Type header in op "application/json". Maak een associatieve array met "status" ("succes") en "gebruiker" ("Jan"). Toon deze als JSON.
Schrijf een functie jsonResponse($data, $statusCode) die de Content-Type op JSON zet, de statuscode instelt, en de data als JSON toont. Test met de array ["fout" => "Niet gevonden"] en statuscode 404.
Bouw een mini-API. Schrijf een functie apiResponse($succes, $data). Als $succes true is, stuur statuscode 200 en return ["status" => "ok", "data" => $data] als JSON. Als $succes false is, stuur statuscode 400 en return ["status" => "fout", "bericht" => $data] als JSON. Stel altijd de Content-Type in op JSON. Test met apiResponse(true, ["naam" => "PHP"]).
header() stuurt HTTP-headers naar de browser, altijd vóór outputheader("Location: url") met exit voor redirectshttp_response_code() stelt de HTTP-statuscode in (200, 301, 403, 404, 500)header("Content-Type: application/json") voor JSON-responsesexit na een redirect