多线程代码
private static function curl_http_post($name, $array, $timeout = 60, $header = [])
{
$res = array();
$mh = curl_multi_init();
$url = self::$url . $name;
foreach ($array as $ke => $val) {
$data = $val;
$post_data = json_encode($data);
$conn[$ke] = curl_init($url);
curl_setopt($conn[$ke], CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($conn[$ke], CURLOPT_ENCODING, 'gzip');
curl_setopt($conn[$ke], CURLOPT_TIMEOUT, $timeout);
curl_setopt($conn[$ke], CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($conn[$ke], CURLOPT_MAXREDIRS, 7);
curl_setopt($conn[$ke], CURLOPT_HEADER, 0);
curl_setopt($conn[$ke], CURLOPT_HTTPHEADER, $header);
curl_setopt($conn[$ke], CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($conn[$ke], CURLOPT_RETURNTRANSFER, 1);
curl_setopt($conn[$ke], CURLOPT_POST, 1);
curl_setopt($conn[$ke], CURLOPT_POSTFIELDS, $post_data);
curl_multi_add_handle($mh, $conn[$ke]);
}
$active = null;
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && $mrc == CURLM_OK) {
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]);
$header[$k] = curl_getinfo($conn[$k]);
curl_close($conn[$k]);
}
curl_multi_close($mh);
foreach ($res as $key => &$value) {
$value = json_decode($value, true);
}
return $res;
}
调用方式
$result = self::curl_http_post($name, $data, 60, ["Content-Type: application/json"]);