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 cucurl_getinfo. - Afișezi mesajul
curl_errorvizitatorilor. 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ă.