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 −

curl_multi_add_handle Output

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 −

curl_multi_add_handle Output

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'
php_function_reference.htm
Advertisements