function Curl_http($array, $timeout)
{
$res = array();
$mh = curl_multi_init(); //创建多个curl语柄
//var_dump($mh);exit;
$startime = getmicrotime();
//echo $startime;exit;
foreach($array as $k => $url)
{
$conn[$k] = curl_init($url);//创建一个curl 会话
//curl_setopt 设置一个cURL传输
curl_setopt($conn[$k], CURLOPT_TIMEOUT, $timeout); //设置超时时间
curl_setopt($conn[$k], CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');//在HTTP请求中包含一个"User-Agent: "头的字符串
curl_setopt($conn[$k], CURLOPT_MAXREDIRS, 7); //HTTp定向级别
curl_setopt($conn[$k], CURLOPT_HEADER, 0); //这里不要header,加块效率
// curl_setopt($conn[$k], CURLOPT_FOLLOWLOCATION, 1); // 302 redirect
curl_setopt($conn[$k], CURLOPT_RETURNTRANSFER, 1);
curl_multi_add_handle ($mh, $conn[$k]);//向curl批处理会话中添加单独的curl句柄
}
// 防止死循环耗死cpu 这段是根据网上的写法
do
{
$mrc = curl_multi_exec($mh, $active); //当无数据,active=true
}
while ($mrc == CURLM_CALL_MULTI_PERFORM); //当正在接受数据时
while ($active and $mrc == CURLM_OK) // 当无数据时或请求暂停时,active=true
{
if (curl_multi_select($mh) != -1)
{
do
{
$mrc = curl_multi_exec($mh, $active);
}
while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
   
foreach ($array as $k => $url)
{
curl_error($conn[$k]);
$res[$k] = curl_multi_getcontent($conn[$k]); //获得返回信息
// var_dump($res[$k]);exit;
$header[$k] = curl_getinfo($conn[$k]); //返回头信息
//var_dump($header[$k]);exit;
curl_close($conn[$k]); //关闭语柄
curl_multi_remove_handle($mh , $conn[$k]); //释放资源
}
   
curl_multi_close($mh);//关闭一组cURL句柄
$endtime = getmicrotime();
$diff_time = $endtime - $startime;
   
return array('diff_time' => $diff_time,
'return' => $res,
// 'header' => $header
);
// var_dump($da['return']);exit('000');
}
// 计算当前时间
function getmicrotime()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}