Вывести ошибки curl php

curl_errno

Возвращает номер ошибки или 0 (ноль), если ошибки не произошло.

Список изменений

Примеры

Пример #1 Пример использования curl_errno()

// Создаём дескриптор curl к несуществующему адресу
$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 );
>

// Закрываем дескриптор
curl_close ( $ch );
?>

Смотрите также

User Contributed Notes 10 notes

if someone need more information about curl errors
$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’ );

Читайте также:  Font type sans serif css

Источник

curl_error

Возвращает понятное сообщение об ошибке для последней операции cURL.

Список параметров

Дескриптор cURL, полученный из curl_init() .

Возвращаемые значения

Возвращает сообщение об ошибке или » (пустую строку), если ошибки не произошло.

Список изменений

Примеры

Пример #1 Пример использования curl_error()

// Создаём дескриптор curl к несуществующему адресу
$ch = curl_init ( ‘http://404.php.net/’ );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , true );

if( curl_exec ( $ch ) === false )
echo ‘Ошибка curl: ‘ . curl_error ( $ch );
>
else
echo ‘Операция завершена без каких-либо ошибок’ ;
>

// Закрываем дескриптор
curl_close ( $ch );
?>

Смотрите также

User Contributed Notes 4 notes

If you want to fetch the error message, make sure you fetch it before you close the current cURL session or the error message will be reset to an empty string.

For a 404 response to actually trigger an error as the example seems to be trying to demonstrate the following option should be set:

CURLE_HTTP_RETURNED_ERROR (22)
This is returned if CURLOPT_FAILONERROR is set TRUE and the HTTP server returns an error code that is >= 400. (This error code was formerly known as CURLE_HTTP_NOT_FOUND.)

If you’re using curl_multi and there’s an error, curl_error() will remain empty until you’ve called curl_multi_info_read(). That function «pumps» the information inside the curl libraries to the point where curl_error() will return a useful string.

This should really be added to the documentation, because it’s not at all obvious.

curl_error is not a textual representation of curl_errno.
It’s an actual error *message*.
If you want textual representation of error *code*, look for curl_strerror.

  • Функции cURL
    • curl_​close
    • curl_​copy_​handle
    • curl_​errno
    • curl_​error
    • curl_​escape
    • curl_​exec
    • curl_​getinfo
    • curl_​init
    • curl_​multi_​add_​handle
    • curl_​multi_​close
    • curl_​multi_​errno
    • curl_​multi_​exec
    • curl_​multi_​getcontent
    • curl_​multi_​info_​read
    • curl_​multi_​init
    • curl_​multi_​remove_​handle
    • curl_​multi_​select
    • curl_​multi_​setopt
    • curl_​multi_​strerror
    • curl_​pause
    • curl_​reset
    • curl_​setopt_​array
    • curl_​setopt
    • curl_​share_​close
    • curl_​share_​errno
    • curl_​share_​init
    • curl_​share_​setopt
    • curl_​share_​strerror
    • curl_​strerror
    • curl_​unescape
    • curl_​upkeep
    • curl_​version

    Источник

    Как отловить ошибки cURL в PHP

    Я использую функции PHP curl для отправки данных на веб-сервер с моей локальной машины. Мой код выглядит следующим образом:

    $c = curl_init();

    curl_setopt($c, CURLOPT_URL, $url);

    curl_setopt($c, CURLOPT_RETURNTRANSFER, true);

    curl_setopt($c, CURLOPT_POST, true);

    curl_setopt($c, CURLOPT_POSTFIELDS, $data);

    $result = curl_exec($c);

    if (curl_exec($c) === false)

    echo «ok»;

    > else

    echo «error»;

    >

    curl_close($c);

    К сожалению, я не могу поймать ни одной ошибки типа 404, 500 или сетевого уровня. Как же мне узнать, что данные не были размещены или получены с удаленного сервера?

    Ответ 1

    Вы можете использовать функцию curl_error(), чтобы определить, произошла ли какая-то ошибка. Например:

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $your_url);

    curl_setopt($ch, CURLOPT_FAILONERROR, true); // Требуется для того, чтобы коды ошибок HTTP сообщались через наш вызов к curl_error($ch)

    //.

    curl_exec($ch);

    if (curl_errno($ch))

    $error_msg = curl_error($ch);

    >

    curl_close($ch);

    if (isset($error_msg))

    // TODO — Обработать ошибку cURL соответствующим образом

    >

    Ответ 2

    Если CURLOPT_FAILONERROR равно false, ошибки http не будут вызывать ошибок curl.

    if (@$_GET[‘curl’]==»yes»)

    header(‘HTTP/1.1 503 Service Temporarily Unavailable’);

    > else

    $ch=curl_init($url = «http://».$_SERVER[‘SERVER_NAME’].$_SERVER[‘PHP_SELF’].»?curl=yes»);

    curl_setopt($ch, CURLOPT_FAILONERROR, true);

    $response=curl_exec($ch);

    $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    $curl_errno= curl_errno($ch);

    if ($http_status==503)

    echo «HTTP Status == 503
    «;

    echo «Curl Errno returned $curl_errno
    «;

    >

    Ответ 3

    Вы можете сгенерировать ошибку curl после его выполнения:

    $url = ‘http://example.com’;

    $ch = curl_init($url);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $result = curl_exec($ch);

    if(curl_errno($ch))

    echo ‘Request Error:’ . curl_error($ch);

    >

    И вот коды ошибок curl:

    если кому-то нужна дополнительная информация об ошибках curl

    $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’);

    ?>

    Ответ 4

    Поскольку вы заинтересованы в отлове ошибок, связанных с сетью, и ошибок HTTP, ниже приведен лучший подход:

    function curl_error_test($url)

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $responseBody = curl_exec($ch);

    /*

    * if curl_exec failed then

    * $responseBody равно false

    * curl_errno() возвращает ненулевое число

    * curl_error() возвращает непустую строку

    * Какой из них использовать — решать вам

    */

    if ($responseBody === false)

    return «CURL Error: » . curl_error($ch);

    >

    $responseCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    /*

    * 4xx коды состояния — ошибки клиента

    * 5xx коды состояния — ошибки сервера

    */

    if ($responseCode >= 400)

    return «HTTP Error: » . $responseCode;

    >

    return » Нет ошибки CURL или HTTP «;

    >

    Тесты:

    curl_error_test(«http://expamle.com»); // Ошибка CURL : Н ев озможно определить хост : expamle.com

    curl_error_test(«http://example.com/whatever»); // Ошибка HTTP: 404

    curl_error_test(«http://example.com»); // Все в порядке с CURL или HTTP

    Ответ 5

    Еще один вариант кода:

    $responseInfo = curl_getinfo($ch);

    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);

    $body = substr($response, $header_size);

    $result=array();

    $result[‘httpCode’]=$httpCode;

    $result[‘body’]=json_decode($body);

    $result[‘responseInfo’]=$responseInfo;

    print_r($httpCode);

    print_r($result[‘body’]); exit;

    curl_close($ch);

    if($httpCode == 403)

    print_r(«Доступ запрещен»);

    exit;

    > else

    // другие ошибки

    >

    Мы будем очень благодарны

    если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.

    Источник

Оцените статью