Signatur
Beschreibung
http_response_code() ermöglicht es, den HTTP-Statuscode zu lesen oder zu setzen, der an den Client gesendet wird. Wird die Funktion ohne Argument oder mit 0 aufgerufen, gibt sie den aktuell gesetzten Statuscode zurück. Wird ein gültiger HTTP-Statuscode übergeben, wird dieser gesetzt und der zuvor aktive Code zurückgegeben.
Die Funktion ist besonders nützlich, wenn semantisch korrekte HTTP-Antworten erzeugt werden sollen – etwa 404 für nicht gefundene Ressourcen, 201 für erfolgreich erstellte Ressourcen in REST-APIs oder 403 für fehlende Zugriffsrechte. Sie ist die modernere und bequemere Alternative zu header('HTTP/1.1 404 Not Found').
Die Funktion wirkt nur, wenn noch keine Ausgabe an den Client gesendet wurde (headers not sent). Im CLI-Modus (Command Line Interface) gibt die Funktion immer true zurück, wenn ein Code gesetzt wird, bzw. false, wenn kein Code gesetzt wurde.
Wichtig: Es wird kein Redirect ausgelöst – für Weiterleitungen muss zusätzlich ein Location-Header gesetzt werden (z. B. mit header()).
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $response_code | int | 0 | Der zu setzende HTTP-Statuscode (z. B. 200, 404, 500). Wird 0 oder kein Wert übergeben, wird der aktuelle Code nur gelesen und nicht verändert. |
Rückgabewert
- Wird ein Code gesetzt: Gibt den zuvor aktiven HTTP-Statuscode als
intzurück. - Wird der Code nur gelesen (kein Argument oder
0): Gibt den aktuellen HTTP-Statuscode alsintzurück (Standard:200). - Im CLI-Modus: Gibt
truezurück, wenn ein Code gesetzt wurde, sonstfalse.
Beispiele
404-Fehlerseite ausgeben
<?php
// Statuscode auf 404 setzen
http_response_code(404);
// Jetzt HTML-Inhalt ausgeben
echo '<h1>Seite nicht gefunden</h1>';
echo '<p>Die angeforderte Seite existiert leider nicht.</p>';
Aktuellen Statuscode auslesen
<?php
// Aktuellen Statuscode lesen (noch nichts gesetzt = 200)
$current = http_response_code();
echo 'Aktueller Statuscode: ' . $current; // 200
// Nun auf 403 setzen und vorherigen Code speichern
$previous = http_response_code(403);
echo 'Vorheriger Statuscode: ' . $previous; // 200
echo 'Neuer Statuscode: ' . http_response_code(); // 403
REST-API: Ressource erstellt (201 Created)
<?php
header('Content-Type: application/json');
http_response_code(201);
$response = [
'status' => 'created',
'id' => 42,
'message' => 'Ressource erfolgreich erstellt.',
];
echo json_encode($response);
// Wichtig · Fallstricke
Headers already sent: Wie bei allen Header-Funktionen muss http_response_code() aufgerufen werden, bevor irgendeine Ausgabe (HTML, Echo, Leerzeichen) erfolgt – sonst wird eine Warnung (Cannot modify header information) ausgegeben und der Code hat keine Wirkung.
Weiterleitung: Das Setzen des Statuscodes auf 301 oder 302 allein genügt nicht für eine Weiterleitung. Es muss zusätzlich header('Location: https://example.com') gesetzt werden.
CLI-Modus: Im CLI-Kontext werden keine echten HTTP-Header gesendet; die Funktion gibt daher true oder false zurück, statt den tatsächlichen Code.