現在の位置: ホーム> 最新記事一覧> curl_share_init()関数を使用してDNSキャッシュ共有を実装し、PHPアプリケーションのパフォーマンスを改善する方法は?

curl_share_init()関数を使用してDNSキャッシュ共有を実装し、PHPアプリケーションのパフォーマンスを改善する方法は?

M66 2025-06-23

PHPでは、 CurlはURLを介してHTTP要求を実行するための非常に強力なツールです。取得、リクエストの投稿、および他の多くのHTTP関連操作を処理できます。ただし、DNSクエリは、多くの場合、特に高周波リクエストで複数のHTTP要求を行う際のパフォーマンスボトルネックの1つです。各リクエストのDNSの再配分を回避するために、PHPはDNSキャッシュ共有にcurl_share_init()関数を提供し、それによってPHPアプリケーションのパフォーマンスが向上します。

curl_share_init()関数とは何ですか?

curl_share_init()は、共有リソースの初期化に使用される関数です。共有リソースを使用して、複数のカールセッション、特にDNSキャッシュ間でデータを共有できます。 DNSキャッシュを共有することにより、複数のCurl要求により、DNSクエリの重複を回避でき、アプリケーションのパフォーマンスが向上します。

関数の署名:

 resource curl_share_init ( void )

この関数には入力パラメーターがなく、Curl共有ハンドル( curl_share_handle )を返します。この共有ハンドルは、異なるカールセッション間でキャッシュされたデータを共有するために使用されます。

なぜDNSキャッシュ共有を使用するのですか?

共有キャッシュがない場合、Curlは要求するたびにDNSクエリを実行するため、遅延が増加します。特に、同じドメイン名に複数のリクエストを行っている場合、DNSクエリの繰り返しは多くの時間を無駄にする可能性があります。 DNSキャッシュの共有を有効にすることにより、DNS解像度のオーバーヘッドを大幅に減らすことができ、それによりPHPアプリケーションの応答速度が向上します。

curl_share_init()を使用してDNSキャッシュ共有を実装する方法は?

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

まず、 CURL_SHARE_INIT()が呼び出され、共有リソースを初期化します。

 $share = curl_share_init();

ステップ2:DNSキャッシュを共有するように共有ハンドルを構成する

共有ハンドルが初期化されたら、 curl_share_setopt()を使用してDNSキャッシュ共有を有効にします。 curlshopt_shareオプションは、共有するリソースのタイプを指定し、 curl_lock_data_dnsはDNSキャッシュを共有するために使用されます。

 curl_share_setopt($share, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);

ステップ3:カールセッションを作成し、共有ハンドルをバインドします

次に、複数のカールセッションを作成し、共有ハンドルをそれらにバインドします。

 $ch1 = curl_init('http://m66.net');
curl_setopt($ch1, CURLOPT_SHARE, $share);

$ch2 = curl_init('http://m66.net');
curl_setopt($ch2, CURLOPT_SHARE, $share);

ステップ4:Curlリクエストを実行します

すべてのカールセッションを設定した後、リクエストを個別に実行できます。

 curl_exec($ch1);
curl_exec($ch2);

ステップ5:カールセッションを閉じてリソースを共有します

リクエストが完了したら、すべてのカールセッションと共有リソースを閉じてください。

 curl_close($ch1);
curl_close($ch2);
curl_share_close($share);

サンプルコード

curl_share_init()関数を使用してDNSキャッシュ共有を実装する方法を示す完全な例を次に示します。