PHP cURL curl_multi_add_handle() Function
The PHP Client URL curl_multi_add_handle() function is used to add a normal cURL handle to a cURL multi handle. As a result, this function created different cURL handles within a cURL multi handle. This lets you send multiple cURL requests at once.
Syntax
Below is the syntax of the PHP cURL curl_multi_add_handle() function −
int curl_multi_add_handle (resource $multi_handle, resource $curl_handle)
Parameters
Below are the required parameters of the curl_multi_add_handle() function:
$multi_handle − It is the cURL multi handle resource returned by curl_multi_init()
$curl_handle − It is the individual cURL handle resource to add.
Return Value
The curl_multi_add_handle() function returns 0 on success else it returns errors code from one of the CURLM_XXX.
PHP Version
First introduced in core PHP 5, the curl_multi_add_handle() function continues to function easily in PHP 7, and PHP 8.
Example 1
Here is the basic example of the PHP cURL curl_multi_add_handle() function to add a single cURL handle to a multi handle −
<?php
// Start a cURL multi handle
$mh = curl_multi_init();
// Start a cURL handle
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "https://tutorialspoint.com");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
// Add the cURL handle to the multi handle
curl_multi_add_handle($mh, $ch1);
// Execute all queries at the same time
$running = null;
do {
curl_multi_exec($mh, $running);
curl_multi_select($mh);
} while ($running > 0);
// Get the content
$res1 = curl_multi_getcontent($ch1);
// Remove the handle from the multi handle
curl_multi_remove_handle($mh, $ch1);
// Close the handle
curl_close($ch1);
// Close the multi handle
curl_multi_close($mh);
// Output the response
echo $res1;
Output
It will show the HTML content fetched from the URL −
Example 2
In the below PHP code we will try to use the curl_multi_add_handle() function and add multiple cURL handles to a multi handle and execute them −
<?php
// Start a cURL multi handle
$mh = curl_multi_init();
// Start first cURL handle
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "https://example.com");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
// Start second cURL handle
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, "https://example.org");
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
// Add the cURL handles to the multi handle
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);
// Execute all queries at the same time
$running = null;
do {
curl_multi_exec($mh, $running);
curl_multi_select($mh);
} while ($running > 0);
// Get the content
$res1 = curl_multi_getcontent($ch1);
$res2 = curl_multi_getcontent($ch2);
// Remove the handles from the multi handle
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
//Close the handle
curl_close($ch1);
curl_close($ch2);
// Close the multi handle
curl_multi_close($mh);
// Output the responses
echo "Response from example.com: $res1\n";
echo "Response from example.org: $res2\n";
?>
Output
This will represent the HTML content of the given URLs −
Example 3
The below PHP example shows how to handle errors when we are using the curl_multi_add_handle() function −
<?php
// Start a cURL multi handle
$mh = curl_multi_init();
// Start a cURL handle
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "https://invalid-url"); // Provide the URL which is not valid
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
// Add the cURL handle to the multi handle
curl_multi_add_handle($mh, $ch1);
// Execute all queries simultaneously
$running = null;
do {
curl_multi_exec($mh, $running);
curl_multi_select($mh);
} while ($running > 0);
// Check for errors
if (curl_errno($ch1)) {
echo 'There is an Error: ' . curl_error($ch1);
} else {
// Get the content
$res1 = curl_multi_getcontent($ch1);
echo $res1;
}
// Remove the handle from the multi handle
curl_multi_remove_handle($mh, $ch1);
curl_close($ch1);
// Close the multi handle
curl_multi_close($mh);
?>
Output
This will create the below output −
There is an Error: Couldn't resolve host 'invalid-url'