web-dev-qa-db-ja.com

curl_error()の取得:2は、freshdesk apiからすべてのユーザーを取得する際の有効なcURLハンドルリソースではありません

私は、freshdesk.comからAPIを通じて提供されるすべてのチケットを管理するための独自のシステムを作成しています。 freshdesk.comからデータを取得するためにcurlリクエストを行っています。ティッカーに関連するデータを取得すると正常に動作しますが、curlリクエストを介してすべてのユーザーにリクエストすると、エラーが発生します:

警告: curl_errno():2は、28行目のC:\ wamp\www\test.phpの有効なcURLハンドルリソースではありません。

私のコードはそのようなものです:

$ch = curl_init();  
$cOption = array(
    CURLOPT_URL            => 'http://velocity.freshdesk.com/contacts.xml',
    CURLOPT_HEADER         => 0,
    CURLOPT_USERPWD        => "$email:$password",
    CURLOPT_POST           => false,
    CURLOPT_HTTPHEADER     => array('Content-Type: application/xml'),
    CURLOPT_HTTPAUTH       => CURLAUTH_BASIC,
    CURLOPT_FAILONERROR    => 1,
    CURLOPT_SSL_VERIFYHOST => 2,
    CURLOPT_SSLVERSION     => 2
);  
@curl_setopt_array( $ch, $cOption );  
curl_close($ch);
echo curl_errno($ch);  //line 28
echo curl_error($ch);  //line 29
echo $ch_result;  

出力は次のとおりです。
警告: curl_errno():2行目のC:\ wamp\www\test.phpにある2は有効なcURLハンドルリソースではありません。
警告: curl_errno():2は、C:\ wamp\www\test.phpの29行目の有効なcURLハンドルリソースではありません。
1 // echo $ ch_resultの出力

コードの何が問題なのか、なぜこの警告が発生するのかを理解してください。

26
user2393886

_curl_errno_を閉じた後、_curl_error_と_$ch_を使用します。それは正しくありません。

エラーに関する情報を取得した後、_$ch_を閉じる必要があります。

_echo curl_errno($ch);
echo curl_error($ch);
curl_close($ch);
_

また、_$ch_result_には何も設定していません。リクエストの結果が含まれていると思われる場合、あなたは間違っています。これを修正するには、オプション_CURLOPT_RETURNTRANSFER_を追加し、$ch_result = curl_exec($ch);で結果を取得する必要があります

75
_echo curl_errno($ch);
echo curl_error($ch);
_

curl_close($ch);の前に呼び出す必要があります

13
Won Jun Bae

$ chを閉じた後にcurl_errnoとcurl_errorを使用します。それは正しくありません。

エラーに関する情報を取得した後、$ chを閉じる必要があります。

それは本当です、私はこれに答えます。

        $data = curl_exec($ch);
        if (!curl_errno($ch)) {
         ....
        }
        curl_close($ch);
4
Milad.biniyaz