当PHP中的其他curl调用正在进行时,运行其他curl

时间:2017-06-02 11:21:57

标签: php curl asynchronous parallel-processing external

我必须调用外部脚本,其中我使用CURL进行第一次调用以获取大约需要2-3分钟的数据,现在在此期间我需要使用CURL进行其他外部调用以获得第一次调用的进度。但问题是我的下一个电话等到第一个CURL的回复到来。我还检查了curl_multi,但这也没有帮助我,因为我想在第一个呼叫进行时拨多个电话。所以任何人都可以帮我解决。

2 个答案:

答案 0 :(得分:1)

我认为,没有必要进行第二次调用来跟踪CURL进度。您可以通过使用CURL选项CURLOPT_PROGRESSFUNCTION和回调函数来实现相同的目的。

回调方法有5个参数:

  1. cURL资源
  2. 预计要下载的总字节数
  3. 目前已下载的字节数
  4. 预计要上传的总字节数
  5. 目前为止上传的字节数
  6. 在回调方法中,您可以计算下载/上传的百分比。下面给出一个例子:

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://stackoverflow.com");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'progress');
    curl_setopt($ch, CURLOPT_NOPROGRESS, false);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    $html = curl_exec($ch);
    curl_close($ch);
    
    function progress($resource,$download_size, $downloaded, $upload_size, $uploaded)
    {
        if($download_size > 0)
            echo $downloaded / $download_size  * 100 . "%\n";
        sleep(1);
    }
    

答案 1 :(得分:0)

有一种方法可以执行此操作 - 请参阅以下链接,他们使用curl_multi_init解释如何执行此操作:php.net curl_multi_inithttp://arguments.callee.info/2010/02/21/multiple-curl-requests-with-php/