現在の位置: ホーム> 最新記事一覧> curl_multi_close curl_errorと協力するためのエラートラブルシューティングスキル

curl_multi_close curl_errorと協力するためのエラートラブルシューティングスキル

gitbox 2025-05-12

PHPでは、 CurlはHTTPリクエストと処理応答を送信するための非常に強力なライブラリです。同時リクエストを作成するとき、通常、 curl_multi_*関数を使用してマルチスレッドを実行します。リクエストの数が増えるにつれて、デバッグとトラブルシューティングエラーが特に重要になります。この記事では、 curl_multi_close関数とcurl_errorを使用して、マルチスレッドリクエストのエラーを効果的にトラブルシューティングする方法について説明します。

1. curl_multi_*関数は何ですか?

curl_multi_*シリーズ関数は、複数のHTTP要求を同時に開始するPHPの関数です。単一のcurl_execとは異なり、 curl_multi_*は一度に複数のリクエストを実行して応答を処理できます。そのコア関数は次のとおりです。

2。エラートラブルシューティングには、 curl_multi_closecurl_errorを使用します

curl_multi_closeは、主にすべてのリクエストが実行された後、マルチハンドルリソースを閉じるために主に使用されますが、 curl_errorはcurl要求でエラー情報を取得するために使用されます。マルチスレッドリクエストでは、通常、複数のリクエストが同時に処理され、エラーがすぐに表示されない場合があります。これら2つの機能を合理的に組み合わせることで、エラーをキャッチしてトラブルシューティングするのに役立ちます。

ステップ1:カールハンドルを初期化します

まず、Curlマルチハンドルを初期化し、リクエストごとに独立したカールハンドルを作成する必要があります。

 $mh = curl_multi_init(); // 複数のハンドルを初期化します
$urls = [
    "https://example.com/api/endpoint1",
    "https://example.com/api/endpoint2",
    "https://example.com/api/endpoint3",
];

$curlHandles = [];
foreach ($urls as $index => $url) {
    $ch = curl_init($url); // シングルを初期化します cURL ハンドル
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $curlHandles[$index] = $ch;
    curl_multi_add_handle($mh, $ch); // 将ハンドル添加到多ハンドル中
}
ステップ2:マルチスレッドリクエストを実行します

curl_multi_execを使用してすべての要求を実行し、実行ステータスを監視します。

 $running = null;
do {
    curl_multi_exec($mh, $running); // リクエストを実行します
    curl_multi_select($mh); // 操作が完了するのを待ちます
} while ($running > 0);
ステップ3:リクエスト結果とトラブルシューティングを処理します

すべてのリクエストが完了したら、 curl_multi_getContentを介して各要求の応答コンテンツを取得し、 curl_errorを使用してリクエストが失敗したかどうかを確認できます。

 foreach ($curlHandles as $index => $ch) {
    $response = curl_multi_getcontent($ch); // 応答コンテンツを取得します
    if (curl_errno($ch)) {
        // エラーメッセージをキャプチャします
        $error_msg = curl_error($ch);
        echo "聞く {$urls[$index]} エラーが発生しました: $error_msg\n";
    } else {
        echo "聞く {$urls[$index]} 成功,応答コンテンツ: $response\n";
    }
    curl_multi_remove_handle($mh, $ch); // 从多ハンドル中移除
    curl_close($ch); // 关闭单个ハンドル
}
ステップ4:複数のハンドルを閉じます

最後に、 curl_multi_closeを使用して複数のハンドルを閉じてリソースを解放します。

 curl_multi_close($mh); // 关闭多ハンドル

3.エラーの確認例

APIリクエストのリストがあり、同時に処理する場合、特定のリクエストの障害に遭遇する可能性があるとします。上記の方法を介して、エラーをキャッチしてエラーメッセージを印刷できます。一般的なエラーには、DNS解像度の障害、接続タイムアウトなどが含まれます。通常、 curl_errorは、エラーの特定の原因を特定するのに役立ちます。

4。概要

curl_multi_closecurl_errorを使用して、マルチスレッドリクエストのエラーチェックと協力することは、非常に効果的なデバッグ方法です。要求ごとにエラー情報を合理的にキャプチャすることにより、同時リクエストで発生する問題をすばやく見つけて解決できます。同時リクエストを処理するときは、コードを明確かつ簡潔に保ち、過度のネストと複製コードを避けるようにしてください。