PHP cURL curl_multi_strerror() Function



The PHP Client URL curl_multi_strerror() function is used to return a text error message which is describing the given error code. So this function is useful for handling errors and understanding what went wrong.

Syntax

Below is the syntax of the PHP cURL curl_multi_strerror() function −

string curl_multi_strerror (int $en)

Parameters

This function accepts $en parameter which is an integer is used to denote the error code. This error code is returned by a cURL multi function like curl_multi_exec().

Return Value

The curl_multi_strerror() function returns error information or NULL for invalid error code.

PHP Version

This function was introduced in core PHP 5.5.0 and is compatible with PHP 7, and PHP 8.

Example 1

Here is the basic example of how to use the PHP cURL curl_multi_strerror() function to return a text error message.

<?php
   // Create a curl handle 
   $ch = curl_init("htp://tutorialspoint.com/");

   // Execute request
   curl_exec($ch);

   // Check for errors and show the message
   if($errno = curl_errno($ch)) {
      $error_message = curl_strerror($errno);
      echo "cURL error ({$errno}):\n {$error_message}";
   }

   // Close handle
   curl_close($ch);
?> 

Here is the outcome of the following code −

cURL error (1): Unsupported protocol

Example 2

In the below PHP code we will try to use the curl_multi_getcontent() function to used to report any errors while multi handle is being executed in a loop.

<?php
   // Create multiple cURL handles
   $ch1 = curl_init();
   $ch2 = curl_init();

   // Set URLs
   curl_setopt($ch1, CURLOPT_URL, "http://abc123.com/");
   curl_setopt($ch2, CURLOPT_URL, "http://abc123.org/");

   // Create the multi handle
   $mh = curl_multi_init();

   // Add the handles
   curl_multi_add_handle($mh, $ch1);
   curl_multi_add_handle($mh, $ch2);

   // Execute the multi handle
   do {
      $status = curl_multi_exec($mh, $active);
      if ($status > 0) {
         // Get the error string
         $errorMessage = curl_multi_strerror($status);
         echo "cURL error: $errorMessage\n";
      }
   } while ($active && $status == CURLM_OK);

   // Close the handles
   curl_multi_remove_handle($mh, $ch1);
   curl_multi_remove_handle($mh, $ch2);
   curl_multi_close($mh);
   curl_close($ch1);
   curl_close($ch2);
?> 

Output

This will generate the below output −

302 Not Found

Example 3

Here is another way to use the curl_getinfo() function to get errors in string form.

<?php
   // Create cURL handles
   $ch1 = curl_init("http://example.com/");
   $ch2 = curl_init("http://example.org/");

   // Create the multi handle
   $mh = curl_multi_init();

   // Add the handles
   $result1 = curl_multi_add_handle($mh, $ch1);
   $result2 = curl_multi_add_handle($mh, $ch2);

   if ($result1 != CURLM_OK) {
      echo "Error adding ch1: " . curl_multi_strerror($result1) . "\n";
   }

   if ($result2 != CURLM_OK) {
      echo "Error adding ch2: " . curl_multi_strerror($result2) . "\n";
   }

   // Execute the multi handle
   do {
      $status = curl_multi_exec($mh, $active);
      if ($status > 0) {
         // Get the error string
         $errorMessage = curl_multi_strerror($status);
         echo "cURL error: $errorMessage\n";
      }
   } while ($active && $status == CURLM_OK);

   // Close the handles
   curl_multi_remove_handle($mh, $ch1);
   curl_multi_remove_handle($mh, $ch2);
   curl_multi_close($mh);
   curl_close($ch1);
   curl_close($ch2);
?> 

Output

Following is the output of the above code if no error occur −

curl_multi_strerror Output

Example 4

Now we will use the curl_multi_getcontent() function for handling errors by using an array of cURL multi setup.

<?php
   // Initialize multiple cURL handles
   $handles = [];
   $urls = ["http://tutorialspoint.in/", "http://tutorialspoint.org/", "http://tutorialspoint.net/"];

   foreach ($urls as $url) {
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      $handles[] = $ch;
   }

   // Create the multi handle
   $mh = curl_multi_init();

   // Add the handles
   foreach ($handles as $ch) {
      $result = curl_multi_add_handle($mh, $ch);
      if ($result != CURLM_OK) {
         echo "Error adding handle: " . curl_multi_strerror($result) . "\n";
      }
   }

   // Execute the multi handle
   do {
      $status = curl_multi_exec($mh, $active);
      if ($status > 0) {
         // Get the error string
         $em = curl_multi_strerror($status);
         echo "cURL error: $em\n";
      }
   } while ($active && $status == CURLM_OK);

   // Close the handles
   foreach ($handles as $ch) {
      curl_multi_remove_handle($mh, $ch);
      curl_close($ch);
   }

   curl_multi_close($mh);
?> 

Output

This will create the below output −

Error adding handle: Invalid easy handle
cURL error: A libcurl function was given a bad argument
php_function_reference.htm
Advertisements