Ce face header
Înainte de conținutul paginii, serverul trimite browserului câteva rânduri numite antete HTTP. header îți permite să le setezi tu: Location pentru redirecționare, Content-Type pentru tipul conținutului (JSON, PDF, text), Content-Disposition pentru descărcare și altele.
Antetele trebuie trimise înainte de orice ieșire: niciun echo, niciun HTML, nici măcar un spațiu sau o linie goală înainte de <?php. Altfel primești Cannot modify header information - headers already sent.
header_remove("Nume") șterge un antet setat anterior, iar fără parametru le șterge pe toate.
Parametri
| Parametru | Descriere |
|---|---|
$header |
Antetul complet, de forma "Nume: valoare". |
$replace |
Opțional. true (implicit) înlocuiește un antet cu același nume. false adaugă încă unul. |
$response_code |
Opțional. Setează și codul de răspuns HTTP, de exemplu 301. |
Ce returnează
Nimic.
Exemple
Exemplul 1: Redirecționare către altă pagină
După Location pune mereu exit. Altfel scriptul continuă să ruleze și poate face lucruri nedorite.
<?php
header("Location: https://www.dexblog.ro/invata/php/", true, 301);
exit;
Răspunsul HTTP primit de browser
HTTP/1.1 301 Moved Permanently
Location: https://www.dexblog.ro/invata/php/
Exemplul 2: Răspuns JSON pentru un API
<?php
header("Content-Type: application/json; charset=utf-8");
echo json_encode(["succes" => true, "mesaj" => "Salvat"], JSON_UNESCAPED_UNICODE);
Răspunsul HTTP primit de browser
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{"succes":true,"mesaj":"Salvat"}
Exemplul 3: Forțarea descărcării unui fișier
<?php
$fisier = "factura-1024.pdf";
header("Content-Type: application/pdf");
header('Content-Disposition: attachment; filename="' . basename($fisier) . '"');
header("Content-Length: " . filesize($fisier));
header_remove("X-Powered-By");
readfile($fisier);
exit;
Răspunsul HTTP primit de browser
HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Disposition: attachment; filename="factura-1024.pdf"
Content-Length: 48213
Greșeli frecvente
- Ai un spațiu, o linie goală sau un caracter BOM înaintea
<?php, sau unechoînainte deheader. Primeștiheaders already sent. Verifică cuheaders_sent(). - Uiți
exitdupă o redirecționare. Browserul pleacă, dar codul de mai jos se execută în continuare pe server. - Pui în antet date venite de la utilizator fără verificare, de exemplu
header("Location: " . $_GET["url"]). Oricine poate redirecționa vizitatorii spre un site străin. Permite doar adrese din lista ta.
Comenzi înrudite
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.http_response_code: Setează sau citește codul de stare HTTP al răspunsului: 200, 404, 500 etc.setcookie: Trimite browserului un cookie: o valoare mică pe care browserul o păstrează și o trimite înapoi la fiecare cerere.json_encode: Transformă un tablou sau obiect PHP în text JSON.