我想在一个项目中使用php curl,在一个场景中,我需要通过curl发送数据并等待一个响应(并延迟所有代码,直到在curl请求中接收到响应为止)-sync请求,我还希望在另一个场景中异步发送数据,而不是等待curl请求完整的。
是否有一个curl参数或函数可用于异步发送数据,而不是等待目标url的响应来继续代码执行?
这是我现在的代码,默认情况下请求是sync,脚本会一直等到目标url的响应被发送。

$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);

我的应用程序有两种情况:
1)需要将数据传递给辅助服务器,一旦确认服务器接收到数据,请继续在我的应用程序中执行代码;
2)数据被传递到辅助服务器,但是传递的信息并不重要,因此我们不需要等待服务器接收到它的确认,以便继续。
谢谢你

最佳答案

以下是phpDocs中关于如何异步使用curl的示例:

<?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);

?>

07-26 06:51
查看更多