headers_sent / headers_list în PHP

URL și HTTP PHP 4+

Verifică dacă antetele HTTP au fost deja trimise și îți spune în ce fișier și pe ce linie a început afișarea.

Sintaxă
headers_sent(&$filename = null, &$line = null): bool

Ce face headers_sent / headers_list

După prima ieșire (un echo, HTML sau chiar un spațiu), PHP trimite antetele către browser și nu le mai poate schimba. headers_sent îți spune dacă s-a întâmplat deja, ca să nu apelezi header, setcookie sau session_start degeaba.

Cu cei doi parametri primești și locul exact unde a început afișarea: numele fișierului și linia. Este cel mai rapid mod de a găsi spațiul sau echo-ul care strică redirecționarea.

headers_list() returnează lista antetelor pregătite pentru trimitere. În linia de comandă (CLI) lista este mereu goală.

Parametri

Parametru Descriere
$filename Opțional. Variabilă în care se pune fișierul în care a început afișarea.
$line Opțional. Variabilă în care se pune linia.

Ce returnează

true dacă antetele au fost trimise, altfel false.

Exemple

Exemplul 1: Găsirea locului care a început afișarea

<?php
echo "Salut!";

if (headers_sent($fisier, $linie)) {
    echo "<br>Antetele au plecat deja, din $fisier, linia $linie.";
} else {
    header("Location: /contact/");
    exit;
}

Rezultat în browser

Salut!
Antetele au plecat deja, din /var/www/site/index.php, linia 2.

Exemplul 2: Antetele pregătite pentru trimitere

<?php
header("Content-Type: text/plain; charset=utf-8");
header("Cache-Control: no-store");
setcookie("tema", "dark");

print_r(headers_list());

Rezultat în browser

Array
(
    [0] => X-Powered-By: PHP/8.5.11
    [1] => Content-Type: text/plain; charset=utf-8
    [2] => Cache-Control: no-store
    [3] => Set-Cookie: tema=dark
)

Greșeli frecvente

  • Ascunzi eroarea cu @header(...). Problema rămâne: redirecționarea nu se face. Găsește cu headers_sent($fisier, $linie) locul care afișează prea devreme și mută codul.

Comenzi înrudite

  • header: Trimite un antet HTTP către browser: redirecționare, tipul conținutului, descărcare de fișier, cache.
  • setcookie: Trimite browserului un cookie: o valoare mică pe care browserul o păstrează și o trimite înapoi la fiecare cerere.
  • session_start: Pornește sau reia sesiunea vizitatorului, ca să poți păstra date între pagini în $_SESSION.