PHP Conference Japan 2024

curl_errno

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

curl_errno傳回最後一個錯誤代碼

說明

curl_errno(CurlHandle $handle): int

傳回最後一次 cURL 操作的錯誤代碼。

參數

handle

curl_init() 傳回的 cURL 控制代碼。

傳回值

傳回錯誤代碼,如果沒有發生錯誤,則傳回 0(零)。

更新日誌

版本 說明
8.0.0 handle 參數現在需要一個 CurlHandle 實例;先前,預期是一個 resource

範例

範例 #1 curl_errno() 範例

<?php
// 建立一個指向不存在位置的 curl handle
$ch = curl_init('http://404.php.net/');

// 執行
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);

// 檢查是否有任何錯誤發生
if(curl_errno($ch))
{
echo
'Curl 錯誤:' . curl_error($ch);
}

// 關閉 handle
curl_close($ch);
?>

參見

新增註記

使用者貢獻的註記 9 則註記

denis at reddodo dot com
13 年前
如果有人需要更多關於 curl 錯誤的資訊
<?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');

?>
nimasdj AT yahoo [DOT] com
9 年前
致 coder.ua[at]gmail.com

請注意,有些錯誤擁有多個常數

[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
bozo_z_clown at yahoo dot com
15 年前
請注意,您可以使用 curl_multi_info_read() 在 curl_multi_exec() 迴圈中偵測到稍後使用 curl_errno() 無法顯示的錯誤。這在連線錯誤中尤其明顯。
coder.ua[at]gmail.com
11 年前
FreeBSD 8.2-RELEASE 上 PHP 5.4.7 中所有可用的 curl 錯誤常數和值

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 FTP 伺服器回覆異常
CURLE_FTP_ACCESS_DENIED => 9 FTP 存取被拒
CURLE_FTP_USER_PASSWORD_INCORRECT => 10 FTP 使用者名稱或密碼錯誤
CURLE_FTP_WEIRD_PASS_REPLY => 11 FTP 密碼回覆異常
CURLE_FTP_WEIRD_USER_REPLY => 12 FTP 使用者名稱回覆異常
CURLE_FTP_WEIRD_PASV_REPLY => 13 FTP 被動模式回覆異常
CURLE_FTP_WEIRD_227_FORMAT => 14 FTP 227 格式異常
CURLE_FTP_CANT_GET_HOST => 15 無法取得 FTP 主機
CURLE_FTP_CANT_RECONNECT => 16 無法重新連線至 FTP
CURLE_FTP_COULDNT_SET_BINARY => 17 無法設定 FTP 二進位模式
CURLE_PARTIAL_FILE => 18 檔案傳輸不完整
CURLE_FTP_COULDNT_RETR_FILE => 19 無法從 FTP 擷取檔案
CURLE_FTP_WRITE_ERROR => 20 FTP 寫入錯誤
CURLE_FTP_QUOTE_ERROR => 21 FTP 命令錯誤
CURLE_HTTP_NOT_FOUND => 22 HTTP 找不到
CURLE_WRITE_ERROR => 23 寫入錯誤
CURLE_MALFORMAT_USER => 24 使用者名稱格式錯誤
CURLE_FTP_COULDNT_STOR_FILE => 25 無法儲存檔案至 FTP
CURLE_READ_ERROR => 26 讀取錯誤
CURLE_OUT_OF_MEMORY => 27 記憶體不足
CURLE_OPERATION_TIMEOUTED => 28 操作逾時
CURLE_FTP_COULDNT_SET_ASCII => 29 無法設定 FTP ASCII 模式
CURLE_FTP_PORT_FAILED => 30 FTP 連接埠錯誤
CURLE_FTP_COULDNT_USE_REST => 31 無法使用 FTP REST 命令
CURLE_FTP_COULDNT_GET_SIZE => 32 無法取得 FTP 檔案大小
CURLE_HTTP_RANGE_ERROR => 33 HTTP 範圍錯誤
CURLE_HTTP_POST_ERROR => 34 HTTP POST 錯誤
CURLE_SSL_CONNECT_ERROR => 35 SSL 連線錯誤
CURLE_FTP_BAD_DOWNLOAD_RESUME => 36 FTP 下載續傳錯誤
CURLE_FILE_COULDNT_READ_FILE => 37 無法讀取檔案
CURLE_LDAP_CANNOT_BIND => 38 LDAP 無法綁定
CURLE_LDAP_SEARCH_FAILED => 39 LDAP 搜尋失敗
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 HTTP 連接埠錯誤
CURLE_BAD_PASSWORD_ENTERED => 46 輸入密碼錯誤
CURLE_TOO_MANY_REDIRECTS => 47 過多重新導向
CURLE_UNKNOWN_TELNET_OPTION => 48 未知的 Telnet 選項
CURLE_TELNET_OPTION_SYNTAX => 49 Telnet 選項語法錯誤
CURLE_OBSOLETE => 50 已過時
CURLE_SSL_PEER_CERTIFICATE => 51 SSL 對等憑證錯誤
CURLE_GOT_NOTHING => 52 沒有取得任何資料
CURLE_SSL_ENGINE_NOTFOUND => 53 找不到 SSL 引擎
CURLE_SSL_ENGINE_SETFAILED => 54 設定 SSL 引擎失敗
CURLE_SEND_ERROR => 55 傳送錯誤
CURLE_RECV_ERROR => 56 接收錯誤
CURLE_SHARE_IN_USE => 57 共用資源使用中
CURLE_SSL_CERTPROBLEM => 58 SSL 憑證問題
CURLE_SSL_CIPHER => 59 SSL 加密錯誤
CURLE_SSL_CACERT => 60 SSL CA 憑證錯誤
CURLE_BAD_CONTENT_ENCODING => 61 內容編碼錯誤
CURLE_LDAP_INVALID_URL => 62 LDAP URL 無效
CURLE_FILESIZE_EXCEEDED => 63 檔案大小超出限制
CURLE_FTP_SSL_FAILED] => 64 FTP SSL 失敗
cubefox at web dot NOSPAMPLEASE dot de
4 年前
上述手冊僅說明如何使用 curl_error() 從 cURL 控制代碼 ($ch) 取得錯誤描述
<?php
$description
= curl_error($ch);
?>

但您也可以使用 curl_strerror() 從錯誤號碼本身取得描述
<?php
$description
= curl_strerror(curl_errno($ch));
?>

如果您只能存取錯誤號碼而無法存取 cURL 控制代碼,後者會很有用。
david at liip dot ch
12 年前
您應該在 https://php.dev.org.tw/manual/en/curl.constants.php 上查找錯誤代碼,而不是在連結的官方 curl 文件上查找。有些錯誤代碼是不同的,至少另一個頁面上提到的那個是不同的。

在 PHP 中,curl 錯誤號碼 28 稱為

CURLE_OPERATION_TIMEOUTED

而在官方網站上是

CURLE_OPERATION_TIMEDOUT
nono303
2 年前
CURLcode v7.81 反轉陣列給 PHP 使用 (來自 \curl\include\curl\curl.h 第 495 行)
https://gist.github.com/nono303/de1256f55e26fdbcc3e0d72e397ac4a1
gmail@asmqb7
5 年前
/!\ 注意:如果您正在使用 curl 多重控制

當在透過 curl_multi_info_read() 訪問的 curl 控制碼上運行時,此函數在錯誤情況下會返回 0。

您必須查看 curl_multi_info_read() 返回的數據以了解真正的錯誤代碼。真正的錯誤代碼在那裡。
Eugene Kunkel
8 年前
取得所有 CURLE_* 錯誤常數、其適用的錯誤訊息及其適用的錯誤代碼的當前列表。可用於製作包裝類別或將 cURL 錯誤映射到特定的例外物件。

<?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>";
To Top