現在の位置: ホーム> 最新記事一覧> Curlshopt_shareと組み合わせて使用​​されるcurl_share_setopt()curlshopt_unshare詳細な説明

Curlshopt_shareと組み合わせて使用​​されるcurl_share_setopt()curlshopt_unshare詳細な説明

M66 2025-06-03

ネットワークリクエストにPHPのCurlライブラリを使用する場合、通常、操作するために別のCurlハンドル( curl_init() )を作成します。ただし、 curl_share_init()およびcurl_share_setopt()は、複数のCurlハンドル(Cookie、DNSキャッシュ、SSLセッションなど)間でデータを共有する必要がある場合に役立ちます。

この記事では、これらの機能を使用する方法と、 Curlshopt_shareおよびcurlshopt_unshareを介してリソース共有とキャンセル共有メカニズムをキャンセルする方法を詳細に分析します。

1。基本概念

カールでは、各カールハンドルはデフォルトで独立しています。複数のハンドルがいくつかの内部データ(DNS解像度キャッシュ、Cookieデータ、SSLセッションキャッシュなど)を共有する必要がある場合は、「共有ハンドル」を使用できます。

PHPは次の関連機能を提供します。

  • curl_share_init() :共有ハンドルを初期化します。

  • curl_share_setopt() :共有ハンドルの共有オプションを設定します。

  • curl_share_close() :共有ハンドルを閉じます。

対応するオプション:

  • curlshopt_share :共有するリソースタイプを指定します。

  • curlshopt_unshare :sharedであるリソースのタイプを指定します。

2。コード例:共有クッキー

2つの異なるCurlリクエストがあり、同じCookieデータを共有してほしいと仮定します。このようにして、最初の要求に合わせてCookieセットと2番目のリクエストを自動的に使用できます。

 <?php
// 共有ハンドルを初期化します
$sh = curl_share_init();

// 共有コンテンツを設定します,ここで共有します Cookie
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);

// 最初のものを初期化します cURL ハンドル
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "https://m66.net/page1");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch1, CURLOPT_SHARE, $sh);
$response1 = curl_exec($ch1);
curl_close($ch1);

// 2番目を初期化します cURL ハンドル
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, "https://m66.net/page2");
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_SHARE, $sh);
$response2 = curl_exec($ch2);
curl_close($ch2);

// 共有をキャンセルします Cookie
curl_share_setopt($sh, CURLSHOPT_UNSHARE, CURL_LOCK_DATA_COOKIE);

// 关闭共享ハンドル
curl_share_close($sh);

// 出力結果
echo "Response 1:\n$response1\n";
echo "Response 2:\n$response2\n";
?>

3.コードを徐々に解析します

1 ?? curl_share_init()
最初にcurl_share_init()に電話して共有ハンドル$ shを作成します。これは、共有されるデータを管理するために特別に使用されます。

2 ?? curl_share_setopt($ sh、curlshopt_share、curl_lock_data_cookie)
ここでは、共有Cookieデータを指定します。 curl_lock_data_cookieはCookieデータを表し、その他の利用可能な値は次のとおりです。

  • curl_lock_data_dns (dnsキャッシュ)

  • curl_lock_data_ssl_session (SSLセッション)

curl_share_setopt()を複数回呼び出して、さまざまなデータを共有できます。

3 ?? curlopt_share
各カールハンドル( $ ch1$ ch2 )は、指定されたデータを共有できるように、共有ハンドル$ shを介して共有ハンドル$ shにバインドする必要があります。

4 ?? curl_share_setopt($ sh、curlshopt_unshare、curl_lock_data_cookie)
特定のデータを共有する必要がない場合は、 Curlshopt_unshareとの共有をキャンセルすることを指定できます。注: UNSHAREは、このタイプのデータの共有のみをキャンセルしますが、共有ハンドルは引き続き使用できます。

5 ?? curl_share_close($ sh)
最後に、共有ハンドルリソースをリリースします。このステップが必要であることに注意してください。そうしないと、メモリリークを引き起こす可能性があります。

4。注意すべきこと

  • 共有ハンドルは、同じプロセス内でのみ有効です。

  • すべてのデータ型が共有に適しているわけではなく、実際のアプリケーションで適用する際には特定のシナリオが必要です。

  • マルチスレッド環境で共有ハンドルを使用して、スレッドの安全性を確保します。