trying to make 5 curl childs for curl handler and defining them, but can’t find the best way..my code so far
$curls = array($ch1, $ch2, $ch3, $ch4, $ch5); // have a bad feelin about this
$cont = array($cont1, $cont2, $cont3, $cont4, $cont5); // bad
for($i = 0; $i < count($curls); $i++) { // bad
$curls[$i] = curl_init();
curl_setopt($curls[$i], CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curls[$i], CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curls[$i], CURLOPT_REFERER, $ref);
curl_setopt($curls[$i], CURLOPT_USERAGENT, $useragent);
curl_setopt($curls[$i], CURLOPT_COOKIEFILE, $cookiefile);
curl_setopt($curls[$i], CURLOPT_COOKIEJAR, $cookiefile);
curl_setopt($curls[$i], CURLOPT_URL, $url);
curl_setopt($curls[$i], CURLOPT_POST, true);
curl_setopt($curls[$i], CURLOPT_POSTFIELDS, $data);
$cont[$i] = curl_exec($curls[$i]); // bad
curl_setopt($curls[$i], CURLOPT_URL, $url);
curl_setopt($curls[$i], CURLOPT_POST, true);
curl_setopt($curls[$i], CURLOPT_POSTFIELDS, $data);
$cont[$i] = curl_exec($curls[$i]); // bad
}
AND LATER:
$mh = curl_multi_init();
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);
curl_multi_add_handle($mh,$ch3);
curl_multi_add_handle($mh,$ch4);
curl_multi_add_handle($mh,$ch5);
does this work or..is this optimal way? seems kinda bumpy
I would actually handle this a different way. I’d make a single function that handles the creation for a single instance of
curl, with parameters to adjust the variable settings as necessary. This lets me create a single instance, or I can make a loop to create multiple instances.The thing is, many times multiple curl calls depend on whether or not the previous call succeeded. If the first one doesn’t succeed, I’ve now wastefully allocated multiple curl objects. Create the first, run it, error check, create the second, run it, error check it, etc. That way you’re only allocating what you need.
Edit: Something like this
Note that you could probably include the functionality of handling the error and success if it’s generic enough, but you’ll still need to deal with the issue of a single curl call not working due to network issues, etc.