Start · Sprachen · PHP · Referenz · http_response_code

http_response_code

Funktion

Liest oder setzt den HTTP-Antwortstatuscode der aktuellen Antwort.

seit PHP 5.4.0 Kategorie: http

Signatur

http_response_code(int $response_code = 0): int|bool

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

Typ
int|bool
Beschreibung
  • Wird ein Code gesetzt: Gibt den zuvor aktiven HTTP-Statuscode als int zurück.
  • Wird der Code nur gelesen (kein Argument oder 0): Gibt den aktuellen HTTP-Statuscode als int zurück (Standard: 200).
  • Im CLI-Modus: Gibt true zurück, wenn ein Code gesetzt wurde, sonst false.

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
Aktueller Statuscode: 200 Vorheriger Statuscode: 200 Neuer Statuscode: 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);
{"status":"created","id":42,"message":"Ressource erfolgreich erstellt."}

// 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.