运行 other curl 当另一个 curl 调用已经在 PHP 中进行时
Run other curl when the other curl call is already in progress in PHP
我必须调用外部脚本,其中我第一次使用 CURL 调用以获取数据,这大约需要 2-3 分钟,现在在此期间我需要使用 CURL 进行其他外部调用以获取进度第一次打电话。但问题是我的下一个电话要等到第一个 CURL 的回复到来。我还检查了 curl_multi 但这也没有帮助我,因为我想在第一个电话进行时打很多电话。所以任何人都可以帮我解决它。
有一种方法可以做到这一点 - 请参阅以下链接,它们解释了如何使用 curl_multi_init 来做到这一点:php.net curl_multi_init and http://arguments.callee.info/2010/02/21/multiple-curl-requests-with-php/
我想,没有必要进行第二次调用来跟踪 CURL 进度。您可以通过使用带有回调函数的 CURL 选项 CURLOPT_PROGRESSFUNCTION
来实现相同的目的。
回调方法有5个参数:
- cURL 资源
- 预计下载的总字节数
- 目前下载的字节数
- 预计上传的总字节数
- 目前上传的字节数
在回调方法中可以计算百分比downloaded/uploaded。举例如下:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://whosebug.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);
}
我必须调用外部脚本,其中我第一次使用 CURL 调用以获取数据,这大约需要 2-3 分钟,现在在此期间我需要使用 CURL 进行其他外部调用以获取进度第一次打电话。但问题是我的下一个电话要等到第一个 CURL 的回复到来。我还检查了 curl_multi 但这也没有帮助我,因为我想在第一个电话进行时打很多电话。所以任何人都可以帮我解决它。
有一种方法可以做到这一点 - 请参阅以下链接,它们解释了如何使用 curl_multi_init 来做到这一点:php.net curl_multi_init and http://arguments.callee.info/2010/02/21/multiple-curl-requests-with-php/
我想,没有必要进行第二次调用来跟踪 CURL 进度。您可以通过使用带有回调函数的 CURL 选项 CURLOPT_PROGRESSFUNCTION
来实现相同的目的。
回调方法有5个参数:
- cURL 资源
- 预计下载的总字节数
- 目前下载的字节数
- 预计上传的总字节数
- 目前上传的字节数
在回调方法中可以计算百分比downloaded/uploaded。举例如下:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://whosebug.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);
}