http_response_code în PHP

URL și HTTP PHP 5.4+

Setează sau citește codul de stare HTTP al răspunsului: 200, 404, 500 etc.

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

Ce face http_response_code

Fiecare răspuns HTTP are un cod de stare: 200 (OK), 201 (creat), 301 (mutat permanent), 404 (nu există), 403 (acces interzis), 422 (date invalide), 500 (eroare de server). Motoarele de căutare și aplicațiile care îți folosesc API-ul se bazează pe el.

Cu un parametru, http_response_code setează codul. Fără parametru, îl returnează pe cel curent. Ca și header, trebuie apelată înainte de orice afișare.

Parametri

Parametru Descriere
$response_code Opțional. Codul de setat.

Ce returnează

Fără parametru: codul curent sau false dacă nu a fost setat (de exemplu în CLI). Cu parametru: codul anterior, sau true dacă nu exista unul.

Exemple

Exemplul 1: Pagina 404 pentru un articol care nu există

Fără codul 404, Google ar indexa pagina de eroare ca pe o pagină normală.

<?php
$articol = null; // nu l-am găsit în baza de date

if ($articol === null) {
    http_response_code(404);
    echo "<h1>Articolul nu există</h1>";
    exit;
}

Răspunsul HTTP primit de browser

HTTP/1.1 404 Not Found
Content-Type: text/html; charset=UTF-8

<h1>Articolul nu există</h1>

Exemplul 2: Erori de validare într-un API

<?php
header("Content-Type: application/json; charset=utf-8");

$email = "ana@";
if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
    http_response_code(422);
    echo json_encode(["eroare" => "Email invalid"]);
    exit;
}

http_response_code(201);
echo json_encode(["succes" => true]);

Răspunsul HTTP primit de browser

HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json; charset=utf-8

{"eroare":"Email invalid"}

Exemplul 3: Citirea codului setat

<?php
http_response_code(503);

$cod = http_response_code();
echo "Codul răspunsului: $cod";

Rezultat

Codul răspunsului: 503

Greșeli frecvente

  • Afișezi un mesaj de eroare, dar lași codul implicit 200. Pentru browser, motoare de căutare și aplicații, pagina pare reușită.
  • Apelezi funcția după ce ai afișat deja ceva. Primești Cannot set response code - headers already sent.

Comenzi înrudite

  • header: Trimite un antet HTTP către browser: redirecționare, tipul conținutului, descărcare de fișier, cache.
  • headers_sent / headers_list: Verifică dacă antetele HTTP au fost deja trimise și îți spune în ce fișier și pe ce linie a început afișarea.
  • get_headers: Face o cerere către un URL și returnează antetele HTTP ale răspunsului. Util pentru a verifica dacă o pagină există.