最新公告
  • 欢迎您光临波比源码,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • cURL函数库错误码说明之PHP curl_errno函数

    背景概述:游戏接口是使用PHP cURL扩展进行请求操作,但是,被请求的服务器经常会无故的不响应或者超时,总之,就是请求之后收不到响应回来的数据,这时候可不能说对方API接口有问题,或者服务器有故障,总之,可能出现的问题是非常之多,不能一概而论。

    一、给出一段常用的PHP cURL代码:

    1. function sendRequestGame($url
    2.     $header = array('Expect:'); 
    3.     $ch = curl_init(); 
    4.     curl_setopt($ch, CURLOPT_URL, $url); 
    5.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    6.     curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
    7.     curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
    8.     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
    9.     $retData = curl_exec( $ch ); 
    10.     curl_close( $ch ); 
    11.     return $retData

    经常使用PHP cURL函数的人,一定不会陌生吧,同时,我也相信大部分PHPer也是这样写代码的。至少核心部分就是这样,根本没有判断这个请求失败了,是什么情况产生的。

    诚然,通过严重的安全事故导致我必须重新审核这个cURL库,该怎样保证我的请求是稳定可靠的。当出现失败之后,我要知道是什么原因导致的。第一时间知道并反馈到人,进行及时的沟通协调与修复。

    现在我们为了保证每次请求的稳定可靠性,必须加入日志功能,即把失败时请求的相关参数状态和错误码一起记录到日志中,方便,我们失败之后去检查,看代码:

    1. function sendRequestGame($url
    2.     $header = array('Expect:'); 
    3.     $ch = curl_init(); 
    4.     curl_setopt($ch, CURLOPT_URL, $url); 
    5.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    6.     curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
    7.     curl_setopt($ch, CURLOPT_TIMEOUT, 2); 
    8.     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3); 
    9.  $return  = curl_exec( $ch ); 
    10.  $errno = curl_errno( $ch ); 
    11.  $info  = curl_getinfo( $ch ); 
    12.  $info['errno'] = $errno
    13.     curl_close( $ch ); 
    14.  $log = json_encode( $info ); 
    15.  putLog( $log ); 
    16.     return $return
    17. /** 
    18.  * 打日志。 
    19.  * @param string $log 日志内容。 
    20.  * @return void 
    21.  */ 
    22. function putLog( $log ) 
    23.  $log .= "nn"
    24.  $logDir = dirname( __FILE__ ); 
    25.  $logPath = $logDir . "/curl_log.txt"
    26.  if ( !file_exists$logPath ) ) 
    27.  { 
    28.   $handle = fopen$logPath'w' ); 
    29.   fclose ( $handle ); 
    30.  } 
    31.  file_put_contents$logPath$log, FILE_APPEND ); 

    现在调用 sendRequestGame 函数的时候,会将每次请求的信息给json_encode之后保存到日志文件 curl_log.txt中。这样,我们就可以清楚地知道,每次请求到底发生了什么情况,改进之后,增加了两个函数:

    1. $errno = curl_errno( $ch ); 
    2. $info  = curl_getinfo( $ch ); 

    这两个函数非常的关键,第一个 curl_errno是返回当前请求的错误码,0代表没有错误,是一个Ok正常的请求。非0代码请求出现了错误。但是,大部分错误发生时,请求都没有正确到达URL所指定的服务器。如:主机打不到、网址错误、404,当然,不排除有500这种内部服务器错误的存在。

    第二个是函数非常重要,curl_getinfo函数会获取当前请求的相关信息:

    1. Array 
    2.     [url] => http://www.phpfensi.com/ 
    3.     [content_type] => text/html; charset=UTF-8 
    4.     [http_code] => 200 
    5.     [header_size] => 321 
    6.     [request_size] => 53 
    7.     [filetime] => -1 
    8.     [ssl_verify_result] => 0 
    9.     [redirect_count] => 0 
    10.     [total_time] => 2.075 
    11.     [namelookup_time] => 0 
    12.     [connect_time] => 0.031 
    13.     [pretransfer_time] => 0.031 
    14.     [size_upload] => 0 
    15.     [size_download] => 79042 
    16.     [speed_download] => 38092 
    17.     [speed_upload] => 0 
    18.     [download_content_length] => -1 
    19.     [upload_content_length] => 0 
    20.     [starttransfer_time] => 1.388 
    21.     [redirect_time] => 0 
    22.     [certinfo] => Array 
    23.         ( 
    24.         ) 
    25.     [redirect_url] => 

    我相信大家人字面意思就能看懂7788.不明白的话,自己去看PHP官方手册吧,以下,我再附上 curl error code,即 curl_errno函数返回的数字说明:

    CURLE_UNSUPPORTED_PROTOCOL (1) – 您传送给 libcurl 的网址使用了此 libcurl 不支持的协议。 可能是您没有使用的编译时选项造成了这种情况(可能是协议字符串拼写有误,或没有指定协议 libcurl 代码)。

    CURLE_FAILED_INIT (2) – 非常早期的初始化代码失败。 可能是内部错误或问题。

    CURLE_URL_MALFORMAT (3) – 网址格式不正确。

    CURLE_COULDNT_RESOLVE_PROXY (5) – 无法解析代理服务器。 指定的代理服务器主机无法解析。

    CURLE_COULDNT_RESOLVE_HOST (6) – 无法解析主机。 指定的远程主机无法解析。

    CURLE_COULDNT_CONNECT (7) – 无法通过 connect() 连接至主机或代理服务器。

    CURLE_FTP_WEIRD_SERVER_REPLY (8) – 在连接到 FTP 服务器后,libcurl 需要收到特定的回复。 此错误代码表示收到了不正常或不正确的回复。 指定的远程服务器可能不是正确的 FTP 服务器。

    CURLE_REMOTE_ACCESS_DENIED (9) – 我们无法访问网址中指定的资源。 对于 FTP,如果尝试更改为远程目录,就会发生这种情况。

    CURLE_FTP_WEIRD_PASS_REPLY (11) – 在将 FTP 密码发送到服务器后,libcurl 需要收到正确的回复。 此错误代码表示返回的是意外的代码。

    CURLE_FTP_WEIRD_PASV_REPLY (13) – libcurl 无法从服务器端收到有用的结果,作为对 PASV 或 EPSV 命令的响应。 服务器有问题。

    CURLE_FTP_WEIRD_227_FORMAT (14) – FTP 服务器返回 227 行作为对 PASV 命令的响应。如果 libcurl 无法解析此行,就会返回此代码。

    CURLE_FTP_CANT_GET_HOST (15) – 在查找用于新连接的主机时出现内部错误。

    CURLE_FTP_COULDNT_SET_TYPE (17) – 在尝试将传输模式设置为二进制或 ascii 时发生错误。

    CURLE_PARTIAL_FILE (18) – 文件传输尺寸小于或大于预期。当服务器先报告了一个预期的传输尺寸,然后所传送的数据与先前指定尺寸不相符时,就会发生此错误。

    CURLE_FTP_COULDNT_RETR_FILE (19) – ‘RETR’ 命令收到了不正常的回复,或完成的传输尺寸为零字节。

    CURLE_QUOTE_ERROR (21) – 在向远程服务器发送自定义 “QUOTE” 命令时,其中一个命令返回的错误代码为 400 或更大的数字(对于 FTP),或以其他方式表明命令无法成功完成。

    CURLE_HTTP_RETURNED_ERROR (22) – 如果 CURLOPT_FAILONERROR 设置为 TRUE,且 HTTP 服务器返回 >= 400 的错误代码,就会返回此代码。 (此错误代码以前又称为 CURLE_HTTP_NOT_FOUND。)

    CURLE_WRITE_ERROR (23) – 在向本地文件写入所收到的数据时发生错误,或由写入回调 (write callback) 向 libcurl 返回了一个错误。

    CURLE_UPLOAD_FAILED (25) – 无法开始上传。 对于 FTP,服务器通常会拒绝执行 STOR 命令。错误缓冲区通常会提供服务器对此问题的说明。 (此错误代码以前又称为 CURLE_FTP_COULDNT_STOR_FILE。)

    CURLE_READ_ERROR (26) – 读取本地文件时遇到问题,或由读取回调 (read callback) 返回了一个错误。

    CURLE_OUT_OF_MEMORY (27) – 内存分配请求失败。此错误比较严重,若发生此错误,则表明出现了非常严重的问题。

    CURLE_OPERATION_TIMEDOUT (28) – 操作超时。 已达到根据相应情况指定的超时时间。 请注意: 自 Urchin 6.6.0.2 开始,超时时间可以自行更改。 要指定远程日志下载超时,请打开 urchin.conf 文件,取消以下行的注释标记:

    #DownloadTimeout: 30

    CURLE_FTP_PORT_FAILED (30) – FTP PORT 命令返回错误。 在没有为 libcurl 指定适当的地址使用时,最有可能发生此问题。 请参阅 CURLOPT_FTPPORT。

    CURLE_FTP_COULDNT_USE_REST (31) – FTP REST 命令返回错误。如果服务器正常,则应当不会发生这种情况。

    CURLE_RANGE_ERROR (33) – 服务器不支持或不接受范围请求。

    CURLE_HTTP_POST_ERROR (34) – 此问题比较少见,主要由内部混乱引发。

    CURLE_SSL_CONNECT_ERROR (35) – 同时使用 SSL/TLS 时可能会发生此错误。您可以访问错误缓冲区查看相应信息,其中会对此问题进行更详细的介绍。可能是证书(文件格式、路径、许可)、密码及其他因素导致了此问题。

    CURLE_FTP_BAD_DOWNLOAD_RESUME (36) – 尝试恢复超过文件大小限制的 FTP 连接。

    CURLE_FILE_COULDNT_READ_FILE (37) – 无法打开 FILE:// 路径下的文件。原因很可能是文件路径无法识别现有文件。 建议您检查文件的访问权限。

    CURLE_LDAP_CANNOT_BIND (38) – LDAP 无法绑定。LDAP 绑定操作失败。

    CURLE_LDAP_SEARCH_FAILED (39) – LDAP 搜索无法进行。

    CURLE_FUNCTION_NOT_FOUND (41) – 找不到函数。 找不到必要的 zlib 函数。

    CURLE_ABORTED_BY_CALLBACK (42) – 由回调中止。 回调向 libcurl 返回了 “abort”。

    CURLE_BAD_FUNCTION_ARGUMENT (43) – 内部错误。 使用了不正确的参数调用函数。

    CURLE_INTERFACE_FAILED (45) – 界面错误。 指定的外部界面无法使用。 请通过 CURLOPT_INTERFACE 设置要使用哪个界面来处理外部连接的来源 IP 地址。 (此错误代码以前又称为 CURLE_HTTP_PORT_FAILED。)

    CURLE_TOO_MANY_REDIRECTS (47) – 重定向过多。 进行重定向时,libcurl 达到了网页点击上限。请使用 CURLOPT_MAXREDIRS 设置上限。

    CURLE_UNKNOWN_TELNET_OPTION (48) – 无法识别以 CURLOPT_TELNETOPTIONS 设置的选项。 请参阅相关文档。

    CURLE_TELNET_OPTION_SYNTAX (49) – telnet 选项字符串的格式不正确。

    CURLE_PEER_FAILED_VERIFICATION (51) – 远程服务器的 SSL 证书或 SSH md5 指纹不正确。

    CURLE_GOT_NOTHING (52) – 服务器未返回任何数据,在相应情况下,未返回任何数据就属于出现错误。

    CURLE_SSL_ENGINE_NOTFOUND (53) – 找不到指定的加密引擎。

    CURLE_SSL_ENGINE_SETFAILED (54) – 无法将选定的 SSL 加密引擎设为默认选项。

    CURLE_SEND_ERROR (55) – 无法发送网络数据。

    CURLE_RECV_ERROR (56) – 接收网络数据失败。

    CURLE_SSL_CERTPROBLEM (58) – 本地客户端证书有问题

    CURLE_SSL_CIPHER (59) – 无法使用指定的密钥

    CURLE_SSL_CACERT (60) – 无法使用已知的 CA 证书验证对等证书

    CURLE_BAD_CONTENT_ENCODING (61) – 无法识别传输编码

    CURLE_LDAP_INVALID_URL (62) – LDAP 网址无效

    CURLE_FILESIZE_EXCEEDED (63) – 超过了文件大小上限

    CURLE_USE_SSL_FAILED (64) – 请求的 FTP SSL 级别失败

    CURLE_SEND_FAIL_REWIND (65) – 进行发送操作时,curl 必须回转数据以便重新传输,但回转操作未能成功

    CURLE_SSL_ENGINE_INITFAILED (66) – SSL 引擎初始化失败

    CURLE_LOGIN_DENIED (67) – 远程服务器拒绝 curl 登录(7.13.1 新增功能)

    CURLE_TFTP_NOTFOUND (68) – 在 TFTP 服务器上找不到文件

    CURLE_TFTP_PERM (69) – 在 TFTP 服务器上遇到权限问题

    CURLE_REMOTE_DISK_FULL (70) – 服务器磁盘空间不足

    CURLE_TFTP_ILLEGAL (71) – TFTP 操作非法

    CURLE_TFTP_UNKNOWNID (72) – TFTP 传输 ID 未知

    CURLE_REMOTE_FILE_EXISTS (73) – 文件已存在,无法覆盖

    CURLE_TFTP_NOSUCHUSER (74) – 运行正常的 TFTP 服务器不会返回此错误

    CURLE_CONV_FAILED (75) – 字符转换失败

    CURLE_CONV_REQD (76) – 调用方必须注册转换回调

    CURLE_SSL_CACERT_BADFILE (77) – 读取 SSL CA 证书时遇到问题(可能是路径错误或访问权限问题)

    CURLE_REMOTE_FILE_NOT_FOUND (78) – 网址中引用的资源不存在

    CURLE_SSH (79) – SSH 会话中发生无法识别的错误

    CURLE_SSL_SHUTDOWN_FAILED (80) – 无法终止 SSL 连接

    波比源码 – 精品源码模版分享 | www.bobi11.com
    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

    波比源码 » cURL函数库错误码说明之PHP curl_errno函数

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    波比源码
    一个高级程序员模板开发平台
    升级波友尊享更多特权立即升级