Current Location: Home> Latest Articles> How to Use the curl_share_init() Function to Implement DNS Cache Sharing and Improve PHP Application Performance

How to Use the curl_share_init() Function to Implement DNS Cache Sharing and Improve PHP Application Performance

M66 2025-06-23

In PHP, curl is a powerful tool used to make HTTP requests through URLs. It can handle various types of HTTP operations, including GET, POST requests, and many other HTTP-related tasks. However, when making multiple HTTP requests, especially under high-frequency conditions, DNS queries often become a performance bottleneck. To avoid re-parsing DNS for each request, PHP provides the curl_share_init() function to enable DNS cache sharing, thereby enhancing the performance of PHP applications.

What is the curl_share_init() Function?

curl_share_init() is a function used to initialize shared resources. Shared resources can be used to share data between multiple cURL sessions, particularly DNS caches. By sharing the DNS cache, multiple cURL requests can avoid redundant DNS queries, thus improving application performance.

Function Signature:

resource curl_share_init ( void )  

This function takes no input parameters and returns a cURL share handle (curl_share_handle). The share handle is used to share cached data between different cURL sessions.

Why Use DNS Cache Sharing?

Without shared cache, cURL performs a DNS query on every request, which increases latency. This is particularly inefficient when multiple requests are made to the same domain, as repeated DNS queries waste valuable time. Enabling DNS cache sharing can significantly reduce the overhead of DNS resolution, thus improving the response time of PHP applications.

How to Use curl_share_init() to Implement DNS Cache Sharing?

Step 1: Initialize the cURL Share Handle

First, call curl_share_init() to initialize the shared resource.

$share = curl_share_init();  

Step 2: Configure the Share Handle to Share DNS Cache

Once the share handle is initialized, use curl_share_setopt() to set share options and enable DNS cache sharing. The CURLSHOPT_SHARE option specifies the type of resource to share, while CURL_LOCK_DATA_DNS is used to share the DNS cache.

curl_share_setopt($share, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);  

Step 3: Create cURL Sessions and Bind the Share Handle

Next, create multiple cURL sessions and bind the share handle to them.

$ch1 = curl_init('http://m66.net');  
curl_setopt($ch1, CURLOPT_SHARE, $share);  
<p>$ch2 = curl_init('<a rel="noopener" target="_new" class="" href="http://m66.net">http://m66.net</a>');<br>
curl_setopt($ch2, CURLOPT_SHARE, $share);<br>

Step 4: Execute the cURL Requests

Once all cURL sessions are set up, you can execute the requests individually.

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

Step 5: Close the cURL Sessions and Shared Resources

After the requests are completed, be sure to close all cURL sessions and shared resources.

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

Example Code

Here is a complete example that demonstrates how to use the curl_share_init() function to implement DNS cache sharing:

<?php  
// Initialize shared resource  
$share = curl_share_init();  
<p>// Configure shared resource to share DNS cache<br>
curl_share_setopt($share, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);</p>
<p>// Create the first cURL session<br>
$ch1 = curl_init('<a rel="noopener" target="_new" class="" href="http://m66.net">http://m66.net</a>');<br>
curl_setopt($ch1, CURLOPT_SHARE, $share);</p>
<p>// Create the second cURL session<br>
$ch2 = curl_init('<a rel="noopener" target="_new" class="" href="http://m66.net">http://m66.net</a>');<br>
curl_setopt($ch2, CURLOPT_SHARE, $share);</p>
<p>// Execute the requests<br>
curl_exec($ch1);<br>
curl_exec($ch2);</p>
<p>// Close the cURL sessions and shared resources<br>
curl_close($ch1);<br>
curl_close($ch2);<br>
curl_share_close($share);<br>
?><br>

Conclusion

By using the curl_share_init() function, we can implement DNS cache sharing, reducing the number of DNS queries and improving the performance of PHP applications. This is especially effective for applications that frequently make HTTP requests, as it can significantly reduce request latency and enhance response speed.