次の関数を使用して、非同期のカール投稿を作成しています。
function curl_post_multi($urls){
$curl_arr = array();
$num_urls = count($urls);
$mh = curl_multi_init();
for($i= 0; $i < $num_urls; $i++){
$curl_arr[$i] = curl_init();
curl_setopt($curl_arr[$i], CURLOPT_URL, $urls[$i]);
curl_setopt($curl_arr[$i], CURLOPT_HEADER, 0);
curl_setopt($curl_arr[$i], CURLOPT_POST, true);
curl_setopt($curl_arr[$i], CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $curl_arr[$i]);
}
$running = null;
do{
curl_multi_exec($mh, $running);
}while($running > 0);
$results = array();
for($i= 0; $i < $num_urls; $i++){
$results[] = curl_multi_getcontent($curl_arr[$i]);
curl_multi_remove_handle($mh, $curl_arr[$i]);
}
curl_multi_close($mh);
return $results;
}
多くの場合、最初の URL からの結果のみが返されるか、まったく結果が返されないことに気付きました。私はこの関数の約 100 の構成をいじりました。結果は空の配列で、curl_error($curl_arr[$i]) は空なので、どこから問題を探し始めればよいかわかりません。通常のカールを連続して行うと正常に動作するため、URLが正しいことはわかっています。