curl_error / curl_errno în PHP

cURL și email PHP 4.0.3+

Returnează mesajul ultimei erori cURL (domeniu inexistent, timp expirat, problemă SSL). curl_errno dă codul numeric.

Sintaxă
curl_error(CurlHandle $handle): string

Ce face curl_error / curl_errno

Când curl_exec returnează false, cererea nu a ajuns la capăt. curl_error îți spune de ce, în engleză, iar curl_errno returnează codul erorii (0 dacă nu a fost nicio eroare). Coduri frecvente: 6 (domeniul nu poate fi găsit), 7 (conexiune refuzată), 28 (timp expirat), 60 (certificat SSL invalid).

Un răspuns 404 sau 500 nu este o eroare cURL: cererea a reușit, doar că serverul a răspuns cu un cod de eroare. Codul HTTP îl afli cu curl_getinfo($ch, CURLINFO_HTTP_CODE).

Parametri

Parametru Descriere
$handle Cererea creată cu curl_init.

Ce returnează

Mesajul erorii, sau un text gol dacă nu a fost nicio eroare.

Exemple

Exemplul 1: Domeniu inexistent și timp expirat

<?php
$ch = curl_init("https://domeniu-inexistent-dexblog.ro/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

if (curl_exec($ch) === false) {
    echo curl_errno($ch) . ": " . curl_error($ch) . "\n";
}

$ch = curl_init("https://www.dexblog.ro/");
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT_MS => 1]);

if (curl_exec($ch) === false) {
    echo curl_errno($ch) . ": " . curl_error($ch);
}

Rezultat real (necesită conexiune la internet)

6: Could not resolve host: domeniu-inexistent-dexblog.ro
28: Resolving timed out after 1 milliseconds

Exemplul 2: Tratarea completă: eroare cURL și cod HTTP

<?php
$ch = curl_init("https://www.dexblog.ro/pagina-care-nu-exista/");
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 10]);

$raspuns = curl_exec($ch);

if ($raspuns === false) {
    echo "Eroare de conexiune: " . curl_error($ch);
} elseif (curl_getinfo($ch, CURLINFO_HTTP_CODE) !== 200) {
    echo "Serverul a răspuns cu codul " . curl_getinfo($ch, CURLINFO_HTTP_CODE);
} else {
    echo "Am primit " . strlen($raspuns) . " octeți";
}

Rezultat real (necesită conexiune la internet)

Serverul a răspuns cu codul 404

Greșeli frecvente

  • Verifici doar curl_error și consideri că un răspuns 404 sau 500 este reușit. Verifică și codul HTTP cu curl_getinfo.
  • Afișezi mesajul curl_error vizitatorilor. Poate conține adrese interne. Scrie-l în jurnal și arată un mesaj general.

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.
  • curl_setopt_array: Setează mai multe opțiuni cURL dintr-o dată, dintr-un tablou. Codul devine mai scurt și mai ușor de citit.
  • get_headers: Face o cerere către un URL și returnează antetele HTTP ale răspunsului. Util pentru a verifica dacă o pagină există.