PHP cURL sync and async

15,642

Here is an example from PHP Docs of how to use curl asynchronously:

<?php
// create both cURL resources
$ch1 = curl_init();
$ch2 = curl_init();

// set URL and other appropriate options
curl_setopt($ch1, CURLOPT_URL, "http://lxr.php.net/");
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/");
curl_setopt($ch2, CURLOPT_HEADER, 0);

//create the multiple cURL handle
$mh = curl_multi_init();

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

$active = null;
//execute the handles
do {
    $mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active && $mrc == CURLM_OK) {
    if (curl_multi_select($mh) != -1) {
        do {
            $mrc = curl_multi_exec($mh, $active);
        } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }
}

//close the handles
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);

?>
Share:
15,642
NVG
Author by

NVG

Updated on June 09, 2022

Comments

  • NVG
    NVG almost 2 years

    I want to use PHP cURL in a project and in a scenario I need to send the data via cURL and wait for a response (and delay all code until a response is received in the cURL request) - sync request, and I also want in a different scenario to send the data async and not wait for the cURL request to be completed.

    Is there a cURL parameter or function that I can use to send the data ASYNC and not wait for the response from the target URL to continue the code execution?

    Here's my code for now, and the request is sync, by default, and the script waits until a response from the target URL is sent.

    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_POST,1);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
    $result = curl_exec($ch);
    curl_close($ch);
    

    My application has two scenarios:

    1) Data needs to be passed to a secondary server and once there is a confirmation that the server received it, continue the code execution in my application;

    2) Data is passed to a secondary server, but the information passed is not so important, therefore we do not need to wait for a confirmation that the server received it, in order to continue. Thank you