curl_errno

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

curl_errno返回最后一次的错误代码

说明

curl_errno ( resource $ch ) : int

返回最后一次 cURL 操作的错误代码。

参数

ch

curl_init() 返回的 cURL 句柄。

返回值

返回错误代码或在没有错误发生时返回 0 (零)。

范例

Example #1 curl_errno() 例子

<?php
// 创建 cURL 句柄,指向不存在的位置
$ch curl_init('http://404.php.net/');

// 执行
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
curl_exec($ch);

// 检查是否有错误发生
if(curl_errno($ch))
{
    echo 
'Curl error: ' curl_error($ch);
}

// 关闭句柄
curl_close($ch);
?>

参见

User Contributed Notes

gmail@asmqb7 20-Apr-2019 04:43
/!\ 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.
Eugene Kunkel 15-Nov-2016 11:25
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>";
nimasdj AT yahoo [DOT] com 28-Jul-2015 03:48
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
coder.ua[at]gmail.com 10-Jan-2013 11:29
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
david at liip dot ch 09-Dec-2011 02:40
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
denis at reddodo dot com 27-Mar-2011 03:10
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');

?>
bozo_z_clown at yahoo dot com 14-Jun-2009 03:40
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.
Jacques Manukyan 28-Dec-2007 08:43
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.