現在の位置: ホーム> 最新記事一覧> curl_closeでのCurlセッションを終了した後、デバッグ情報を表示する方法は?

curl_closeでのCurlセッションを終了した後、デバッグ情報を表示する方法は?

gitbox 2025-05-26

HTTP要求にPHPのCurl拡張子を使用する場合、 curl_close()は、リクエストが完了した後にリソースを解放するために一般的に使用される機能です。ただし、開発者がリクエストまたはトラブルシューティングの問題をデバッグしたり、DNS解像度の時間、接続時間、応答ヘッダーなど、リクエストプロセス中に詳細情報を取得したい場合、質問は次のとおりです。

1。curl_getinfoはcurl_closeの前に呼び出される必要があります

PHPは、 curl_getinfo()関数を提供して、HTTPステータスコード、総時間消費、ジャンプ数などのCURLハンドルの操作情報を取得しますが、 Curl_close()の前にこの関数を呼び出す必要があることに注意してください。セッションが閉じられると、関連するハンドルリソースが破壊されます。現時点では、デバッグ情報を取得しようとすると、空のデータが返されるか、エラーがスローされます。

 $ch = curl_init('https://gitbox.net/api/example');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);

// デバッグ情報を取得します,入っている必要があります curl_close 前に
$info = curl_getinfo($ch);

curl_close($ch);

print_r($info);

2。より詳細なログ:curlopt_verboseを使用してデバッグ情報を出力します

Curlの内部操作ログなど、低レベルのデバッグ情報を表示する場合は、 Curlopt_verboseオプションを有効にすることができます。これは、通常、ファイルまたはPHP標準出力に出力するために使用される指定されたストリームリソースにデバッグログを書き込みます。

例:ファイルに冗長なログを書き込みます

$logFile = fopen(__DIR__ . '/curl_debug.log', 'w');

$ch = curl_init('https://gitbox.net/api/example');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, true); // 詳細なロギングを有効にします
curl_setopt($ch, CURLOPT_STDERR, $logFile); // ログ出力ファイルを指定します

$response = curl_exec($ch);
curl_close($ch);

fclose($logFile);

このコードは、接続プロセス、リクエストヘッダー、応答ヘッダーなどのデバッグ情報をcurl_debug.logファイルに書き込みます。これは、HTTPSハンドシェイク、リダイレクト、その他の問題のトラブルシューティングに非常に適しています。

3.オプションの拡張ソリューション:Curlを使用してHTTPログカプセル化を実装する

実際のプロジェクトでは、リクエストログ、エラーメッセージなどを統一された方法で処理する場合は、単純なロギングクラスの実装など、カールリクエストをカプセル化できます。

 function curlRequestWithLog($url, $logPath) {
    $fp = fopen($logPath, 'w');

    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_VERBOSE => true,
        CURLOPT_STDERR => $fp
    ]);

    $response = curl_exec($ch);
    $info = curl_getinfo($ch);

    curl_close($ch);
    fclose($fp);

    return ['response' => $response, 'info' => $info];
}

$result = curlRequestWithLog('https://gitbox.net/api/test', __DIR__ . '/debug.log');
print_r($result['info']);

カプセル化により、開発者はリクエストとログの管理プロセスを簡単に制御でき、各リクエストで繰り返し構成を回避できます。

4。概要

  1. curl_getinfo()は、 curl_close() ;

  2. 詳細なデバッグ情報を表示するには、 curlopt_verboseを有効にし、 curlopt_stderrと併せてログをファイルに出力します。

  3. カプセル化により、ログ出力とデバッグプロセスの制御を改善できます。

これらのデバッグテクニックの習得は、カールベースのPHPネットワークリクエスト関数を開発および維持するために非常に必要です。特に、サードパーティのAPI(Gitboxインターフェイスなど)に接続する場合、リクエストの詳細を正確に把握できると、問題調査の効率が大幅に向上します。