php curl打开一个网址,如何使用cURL与PHP同时打开多个URL?

您以相同的方式设置每个cURL句柄,然后将它们添加到curl_multi_句柄.要查看的功能是curl_multi_ *功能

documented here.然而,根据我的经验,尝试一次加载太多的URL时出现问题(尽管我目前无法找到我的笔记),所以最后一次我使用curl_mutli_,我一次设置了一批5个URL.

编辑:这是一个缩减版本的代码,我使用curl_multi_:

编辑:稍微重写和许多添加的评论,希望会有所帮助.

// -- create all the individual cURL handles and set their options

$curl_handles = array();

foreach ($urls as $url) {

$curl_handles[$url] = curl_init();

curl_setopt($curl_handles[$url],CURLOPT_URL,$url);

// set other curl options here

}

// -- start going through the cURL handles and running them

$curl_multi_handle = curl_multi_init();

$i = 0; // count where we are in the list so we can break up the runs into smaller blocks

$block = array(); // to accumulate the curl_handles for each group we'll run simultaneously

foreach ($curl_handles as $a_curl_handle) {

$i++; // increment the position-counter

// add the handle to the curl_multi_handle and to our tracking "block"

curl_multi_add_handle($curl_multi_handle,$a_curl_handle);

$block[] = $a_curl_handle;

// -- check to see if we've got a "full block" to run or if we're at the end of out list of handles

if (($i % BLOCK_SIZE == 0) or ($i == count($curl_handles))) {

// -- run the block

$running = NULL;

do {

// track the prevIoUs loop's number of handles still running so we can tell if it changes

$running_before = $running;

// run the block or check on the running block and get the number of sites still running in $running

curl_multi_exec($curl_multi_handle,$running);

// if the number of sites still running changed,print out a message with the number of sites that are still running.

if ($running != $running_before) {

echo("Waiting for $running sites to finish...\n");

}

} while ($running > 0);

// -- once the number still running is 0,curl_multi_ is done,so check the results

foreach ($block as $handle) {

// HTTP response code

$code = curl_getinfo($handle,CURLINFO_HTTP_CODE);

// cURL error number

$curl_errno = curl_errno($handle);

// cURL error message

$curl_error = curl_error($handle);

// output if there was an error

if ($curl_error) {

echo(" *** cURL error: ($curl_errno) $curl_error\n");

}

// remove the (used) handle from the curl_multi_handle

curl_multi_remove_handle($curl_multi_handle,$handle);

}

// reset the block to empty,since we've run its curl_handles

$block = array();

}

}

// close the curl_multi_handle once we're done

curl_multi_close($curl_multi_handle);

考虑到你不需要任何东西从URL,你可能不需要很多的东西,但这是我如何将请求块块BLOCK_SIZE,等待每个块运行,然后继续前进,并抓住来自cURL的错误.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值