get_headers în PHP

URL și HTTP PHP 5+

Face o cerere către un URL și returnează antetele HTTP ale răspunsului. Util pentru a verifica dacă o pagină există.

Sintaxă
get_headers(string $url, bool $associative = false, $context = null): array|false

Ce face get_headers

get_headers trimite o cerere către adresa dată și returnează antetele primite: primul element este linia de stare (de exemplu HTTP/1.1 200 OK), urmată de Content-Type, Server, Location etc.

Cu $associative = true, antetele sunt indexate după nume. Dacă adresa face redirecționări, funcția le urmează și pune în rezultat antetele tuturor răspunsurilor, unul după altul. Antetele care apar de mai multe ori devin tablouri.

Implicit cererea este de tip GET. Pentru a nu descărca tot conținutul, poți trimite un context cu metoda HEAD.

Parametri

Parametru Descriere
$url Adresa verificată.
$associative Opțional. true pentru un tablou cu numele antetelor drept chei.
$context Opțional. Un context creat cu stream_context_create (metodă, limită de timp, antete).

Ce returnează

Tabloul cu antete, sau false dacă cererea eșuează.

Exemple

Exemplul 1: Antetele unei pagini

<?php
print_r(get_headers("https://www.dexblog.ro/"));

Rezultat real (necesită conexiune la internet)

Array
(
    [0] => HTTP/1.1 200 OK
    [1] => Server: nginx
    [2] => Date: Mon, 19 Oct 2026 10:58:31 GMT
    [3] => Content-Type: text/html; charset=UTF-8
    [4] => Transfer-Encoding: chunked
    [5] => Connection: close
    [6] => Vary: Accept-Encoding
    [7] => Link: <https://www.dexblog.ro/wp-json/>; rel="https://api.w.org/"
    [8] => Strict-Transport-Security: max-age=31536000
)

Exemplul 2: Verificarea linkurilor stricate

<?php
$context = stream_context_create(["http" => ["method" => "HEAD", "timeout" => 5]]);

$linkuri = [
    "https://www.dexblog.ro/invata/php/",
    "https://www.dexblog.ro/pagina-care-nu-exista/",
    "http://dexblog.ro/",
];

foreach ($linkuri as $link) {
    $antete = get_headers($link, false, $context);
    echo $link . " => " . ($antete === false ? "fără răspuns" : $antete[0]) . "\n";
}

Rezultat real (necesită conexiune la internet)

https://www.dexblog.ro/invata/php/ => HTTP/1.1 200 OK
https://www.dexblog.ro/pagina-care-nu-exista/ => HTTP/1.1 404 Not Found
http://dexblog.ro/ => HTTP/1.1 301 Moved Permanently

Exemplul 3: Unde duce o redirecționare

Cu antete asociative, Location conține toate adresele prin care a trecut cererea.

<?php
$antete = get_headers("http://dexblog.ro/", true);

print_r($antete["Location"]);
echo "Răspunsul final: " . $antete[2];

Rezultat real (necesită conexiune la internet)

Array
(
    [0] => https://dexblog.ro/
    [1] => https://www.dexblog.ro/
)
Răspunsul final: HTTP/1.1 200 OK

Greșeli frecvente

  • Te uiți doar la $antete[0] pentru o adresă care redirecționează. Primul element este codul primului răspuns (de exemplu 301), nu al paginii finale.
  • Apelezi get_headers fără limită de timp pentru multe linkuri. Un singur server lent blochează tot scriptul. Folosește un context cu timeout.

Comenzi înrudite

  • curl_init / curl_setopt / curl_exec: Pregătește o cerere HTTP către alt server, de exemplu un API. Împreună cu curl_setopt și curl_exec, trimite cererea și primește răspunsul.
  • http_response_code: Setează sau citește codul de stare HTTP al răspunsului: 200, 404, 500 etc.
  • header: Trimite un antet HTTP către browser: redirecționare, tipul conținutului, descărcare de fișier, cache.
  • parse_url: Împarte un URL în componente: protocol, domeniu, port, cale, interogare și fragment.