curl_errno

(PHP 4 >= 4.0.3, PHP 5, PHP 7, PHP 8)

curl_errnoReturn the last error number

Description

curl_errno(CurlHandle $handle): int

Returns the error number for the last cURL operation.

Parameters

handle

A cURL handle returned by curl_init().

Return Values

Returns the error number or 0 (zero) if no error occurred.

Changelog

Version Description
8.0.0 handle expects a CurlHandle instance now; previously, a resource was expected.

Examples

Example #1 curl_errno() example

<?php
// Create a curl handle to a non-existing location
$ch = curl_init('http://404.php.net/');

// Execute
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);

// Check if any error occurred
if(curl_errno($ch))
{
echo
'Curl error: ' . curl_error($ch);
}

// Close handle
curl_close($ch);
?>

See Also

add a note add a note

User Contributed Notes 10 notes

up
112
denis at reddodo dot com
13 years ago
if someone need more information about curl errors
<?php
$error_codes
=array(
[
1] => 'CURLE_UNSUPPORTED_PROTOCOL',
[
2] => 'CURLE_FAILED_INIT',
[
3] => 'CURLE_URL_MALFORMAT',
[
4] => 'CURLE_URL_MALFORMAT_USER',
[
5] => 'CURLE_COULDNT_RESOLVE_PROXY',
[
6] => 'CURLE_COULDNT_RESOLVE_HOST',
[
7] => 'CURLE_COULDNT_CONNECT',
[
8] => 'CURLE_FTP_WEIRD_SERVER_REPLY',
[
9] => 'CURLE_REMOTE_ACCESS_DENIED',
[
11] => 'CURLE_FTP_WEIRD_PASS_REPLY',
[
13] => 'CURLE_FTP_WEIRD_PASV_REPLY',
[
14]=>'CURLE_FTP_WEIRD_227_FORMAT',
[
15] => 'CURLE_FTP_CANT_GET_HOST',
[
17] => 'CURLE_FTP_COULDNT_SET_TYPE',
[
18] => 'CURLE_PARTIAL_FILE',
[
19] => 'CURLE_FTP_COULDNT_RETR_FILE',
[
21] => 'CURLE_QUOTE_ERROR',
[
22] => 'CURLE_HTTP_RETURNED_ERROR',
[
23] => 'CURLE_WRITE_ERROR',
[
25] => 'CURLE_UPLOAD_FAILED',
[
26] => 'CURLE_READ_ERROR',
[
27] => 'CURLE_OUT_OF_MEMORY',
[
28] => 'CURLE_OPERATION_TIMEDOUT',
[
30] => 'CURLE_FTP_PORT_FAILED',
[
31] => 'CURLE_FTP_COULDNT_USE_REST',
[
33] => 'CURLE_RANGE_ERROR',
[
34] => 'CURLE_HTTP_POST_ERROR',
[
35] => 'CURLE_SSL_CONNECT_ERROR',
[
36] => 'CURLE_BAD_DOWNLOAD_RESUME',
[
37] => 'CURLE_FILE_COULDNT_READ_FILE',
[
38] => 'CURLE_LDAP_CANNOT_BIND',
[
39] => 'CURLE_LDAP_SEARCH_FAILED',
[
41] => 'CURLE_FUNCTION_NOT_FOUND',
[
42] => 'CURLE_ABORTED_BY_CALLBACK',
[
43] => 'CURLE_BAD_FUNCTION_ARGUMENT',
[
45] => 'CURLE_INTERFACE_FAILED',
[
47] => 'CURLE_TOO_MANY_REDIRECTS',
[
48] => 'CURLE_UNKNOWN_TELNET_OPTION',
[
49] => 'CURLE_TELNET_OPTION_SYNTAX',
[
51] => 'CURLE_PEER_FAILED_VERIFICATION',
[
52] => 'CURLE_GOT_NOTHING',
[
53] => 'CURLE_SSL_ENGINE_NOTFOUND',
[
54] => 'CURLE_SSL_ENGINE_SETFAILED',
[
55] => 'CURLE_SEND_ERROR',
[
56] => 'CURLE_RECV_ERROR',
[
58] => 'CURLE_SSL_CERTPROBLEM',
[
59] => 'CURLE_SSL_CIPHER',
[
60] => 'CURLE_SSL_CACERT',
[
61] => 'CURLE_BAD_CONTENT_ENCODING',
[
62] => 'CURLE_LDAP_INVALID_URL',
[
63] => 'CURLE_FILESIZE_EXCEEDED',
[
64] => 'CURLE_USE_SSL_FAILED',
[
65] => 'CURLE_SEND_FAIL_REWIND',
[
66] => 'CURLE_SSL_ENGINE_INITFAILED',
[
67] => 'CURLE_LOGIN_DENIED',
[
68] => 'CURLE_TFTP_NOTFOUND',
[
69] => 'CURLE_TFTP_PERM',
[
70] => 'CURLE_REMOTE_DISK_FULL',
[
71] => 'CURLE_TFTP_ILLEGAL',
[
72] => 'CURLE_TFTP_UNKNOWNID',
[
73] => 'CURLE_REMOTE_FILE_EXISTS',
[
74] => 'CURLE_TFTP_NOSUCHUSER',
[
75] => 'CURLE_CONV_FAILED',
[
76] => 'CURLE_CONV_REQD',
[
77] => 'CURLE_SSL_CACERT_BADFILE',
[
78] => 'CURLE_REMOTE_FILE_NOT_FOUND',
[
79] => 'CURLE_SSH',
[
80] => 'CURLE_SSL_SHUTDOWN_FAILED',
[
81] => 'CURLE_AGAIN',
[
82] => 'CURLE_SSL_CRL_BADFILE',
[
83] => 'CURLE_SSL_ISSUER_ERROR',
[
84] => 'CURLE_FTP_PRET_FAILED',
[
84] => 'CURLE_FTP_PRET_FAILED',
[
85] => 'CURLE_RTSP_CSEQ_ERROR',
[
86] => 'CURLE_RTSP_SESSION_ERROR',
[
87] => 'CURLE_FTP_BAD_FILE_LIST',
[
88] => 'CURLE_CHUNK_FAILED');

?>
up
11
nimasdj AT yahoo [DOT] com
9 years ago
To coder.ua[at]gmail.com:

Please note some errors have more than one constants:

[CURLE_FTP_PARTIAL_FILE]    18
[CURLE_PARTIAL_FILE]    18

[CURLE_HTTP_NOT_FOUND]    22
[CURLE_HTTP_RETURNED_ERROR]    22

[CURLE_OPERATION_TIMEDOUT]    28
[CURLE_OPERATION_TIMEOUTED]    28

[CURLE_BAD_DOWNLOAD_RESUME]    36
[CURLE_FTP_BAD_DOWNLOAD_RESUME]    36
up
9
bozo_z_clown at yahoo dot com
15 years ago
Note that you can detect errors using curl_multi_info_read() in the curl_multi_exec() loop that don't show up later using curl_errno().  This seems particularly true of connection errors.
up
8
coder.ua[at]gmail.com
11 years ago
All available curl error constants and values in PHP 5.4.7 on FreeBSD 8.2-RELEASE:

CURLE_UNSUPPORTED_PROTOCOL => 1
CURLE_FAILED_INIT => 2
CURLE_URL_MALFORMAT => 3
CURLE_URL_MALFORMAT_USER => 4
CURLE_COULDNT_RESOLVE_PROXY => 5
CURLE_COULDNT_RESOLVE_HOST => 6
CURLE_COULDNT_CONNECT => 7
CURLE_FTP_WEIRD_SERVER_REPLY => 8
CURLE_FTP_ACCESS_DENIED => 9
CURLE_FTP_USER_PASSWORD_INCORRECT => 10
CURLE_FTP_WEIRD_PASS_REPLY => 11
CURLE_FTP_WEIRD_USER_REPLY => 12
CURLE_FTP_WEIRD_PASV_REPLY => 13
CURLE_FTP_WEIRD_227_FORMAT => 14
CURLE_FTP_CANT_GET_HOST => 15
CURLE_FTP_CANT_RECONNECT => 16
CURLE_FTP_COULDNT_SET_BINARY => 17
CURLE_PARTIAL_FILE => 18
CURLE_FTP_COULDNT_RETR_FILE => 19
CURLE_FTP_WRITE_ERROR => 20
CURLE_FTP_QUOTE_ERROR => 21
CURLE_HTTP_NOT_FOUND => 22
CURLE_WRITE_ERROR => 23
CURLE_MALFORMAT_USER => 24
CURLE_FTP_COULDNT_STOR_FILE => 25
CURLE_READ_ERROR => 26
CURLE_OUT_OF_MEMORY => 27
CURLE_OPERATION_TIMEOUTED => 28
CURLE_FTP_COULDNT_SET_ASCII => 29
CURLE_FTP_PORT_FAILED => 30
CURLE_FTP_COULDNT_USE_REST => 31
CURLE_FTP_COULDNT_GET_SIZE => 32
CURLE_HTTP_RANGE_ERROR => 33
CURLE_HTTP_POST_ERROR => 34
CURLE_SSL_CONNECT_ERROR => 35
CURLE_FTP_BAD_DOWNLOAD_RESUME => 36
CURLE_FILE_COULDNT_READ_FILE => 37
CURLE_LDAP_CANNOT_BIND => 38
CURLE_LDAP_SEARCH_FAILED => 39
CURLE_LIBRARY_NOT_FOUND => 40
CURLE_FUNCTION_NOT_FOUND => 41
CURLE_ABORTED_BY_CALLBACK => 42
CURLE_BAD_FUNCTION_ARGUMENT => 43
CURLE_BAD_CALLING_ORDER => 44
CURLE_HTTP_PORT_FAILED => 45
CURLE_BAD_PASSWORD_ENTERED => 46
CURLE_TOO_MANY_REDIRECTS => 47
CURLE_UNKNOWN_TELNET_OPTION => 48
CURLE_TELNET_OPTION_SYNTAX => 49
CURLE_OBSOLETE => 50
CURLE_SSL_PEER_CERTIFICATE => 51
CURLE_GOT_NOTHING => 52
CURLE_SSL_ENGINE_NOTFOUND => 53
CURLE_SSL_ENGINE_SETFAILED => 54
CURLE_SEND_ERROR => 55
CURLE_RECV_ERROR => 56
CURLE_SHARE_IN_USE => 57
CURLE_SSL_CERTPROBLEM => 58
CURLE_SSL_CIPHER => 59
CURLE_SSL_CACERT => 60
CURLE_BAD_CONTENT_ENCODING => 61
CURLE_LDAP_INVALID_URL => 62
CURLE_FILESIZE_EXCEEDED => 63
CURLE_FTP_SSL_FAILED] => 64
up
3
david at liip dot ch
12 years ago
you should look on http://php.net/manual/en/curl.constants.php for the error codes, not on the linked official curl doc. some of the error codes are different, at least the one mentioned on the other page:

in PHP the curl error number 28 is called

CURLE_OPERATION_TIMEOUTED

while in the official site is:

CURLE_OPERATION_TIMEDOUT
up
0
nono303
2 years ago
CURLcode v7.81 reversed array for PHP  (from \curl\include\curl\curl.h l.495)
https://gist.github.com/nono303/de1256f55e26fdbcc3e0d72e397ac4a1
up
0
cubefox at web dot NOSPAMPLEASE dot de
4 years ago
The manual above only mentions how to get an error description from the cURL handle ($ch) using curl_error():
<?php
$description
= curl_error($ch);
?>

But you can also get a description from the error number itself using curl_strerror():
<?php
$description
= curl_strerror(curl_errno($ch));
?>

The latter can be useful if you only have access to the error number but not to the cURL handle.
up
0
gmail@asmqb7
5 years ago
/!\ ATTENTION if you are using curl multi handles

This function returns 0 in error conditions when run on curl handles accessed via curl_multi_info_read().

You must look at the data returned by curl_multi_info_read() for the true errno. The data is over there instead.
up
-3
Eugene Kunkel
8 years ago
Gets a current list of all CURLE_* error constants, their applicable error messages, and their applicable error codes. Useful for making wrapper classes or for mapping cURL errors to specific Exception objects.

<?php

$list  
= get_defined_constants(TRUE);
$list   = preg_grep('/^CURLE_/', array_flip($list['curl']));
$result = array();

foreach (
$list as $const) {
   
$result[$const] = array
    (
       
'code'    => constant($const),
       
'message' => curl_strerror(constant($const))
    );
}

echo
"<pre>";
echo
print_r($result, TRUE);
echo
"</pre>";
up
-9
Jacques Manukyan
16 years ago
The error codes come directly from the curl source code. Specifically, look at the curl.h file and it will tell you exactly what each returned code does.

Most of these codes are cryptic but at least you can get a clue as to what the errors are.

Here is a quick snippet of what the errors in the curl.h look like:

  CURLE_OK = 0,
  CURLE_UNSUPPORTED_PROTOCOL,    /* 1 */
  CURLE_FAILED_INIT,             /* 2 */
  CURLE_URL_MALFORMAT,           /* 3 */
  CURLE_URL_MALFORMAT_USER,      /* 4 - NOT USED */
  CURLE_COULDNT_RESOLVE_PROXY,   /* 5 */
  CURLE_COULDNT_RESOLVE_HOST,    /* 6 */
  CURLE_COULDNT_CONNECT,         /* 7 */
  CURLE_FTP_WEIRD_SERVER_REPLY,  /* 8 */

Note that code 0 means its not an error, it means success.
To Top