Я бы на самом деле справился с этим другим способом.Я бы сделал одну функцию, которая обрабатывает создание для одного экземпляра curl
, с параметрами для настройки параметров переменных по мере необходимости.Это позволяет мне создать один экземпляр или создать цикл для создания нескольких экземпляров.
Дело в том, что многократные вызовы curl зависят от того, был ли предыдущий вызов успешным или нет.Если первая не удалась, я теперь расточительно выделил несколько объектов curl.Создайте первое, запустите его, проверьте ошибки, создайте второе, запустите его, проверьте его и т. Д. Таким образом, вы выделяете только то, что вам нужно.
Редактировать : что-то вроде этого
// get the result of a single curl call
function makeCurlCall($ref, $useragent, $cookiefile, $url, $data)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_REFERER, $ref);
curl_setopt($curl, CURLOPT_USERAGENT, $useragent);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookiefile);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookiefile);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$cont = curl_exec($curl);
// May need to use this later
$error_no = curl_errno($curl);
if($error_no) {
// so we can close before we return
$result = "[" . $error_no . "] " . curl_error($curl);
curl_close($curl);
return array('status' => 'error', 'result' => $result);
}
else {
curl_close($curl);
return array('status' => 'success', 'result' => $cont);
}
}
$curl = makeCurlCall($ref, $useragent, $cookiefile, $url, $data);
if($curl['status'] == 'error') {
// do something for the error
}
else {
// do something with $curl['result']
}
// The first call worked, so make the next call, only allocating what we need
$curl = makeCurlCall($ref, $useragent, $cookiefile, $url, $data);
//etc.
Обратите внимание, что вы, вероятно, можете включить функциональность обработки ошибок и успеха, если она достаточно универсальна, но вам все равно придется решать проблему одного скручивания.звонок не работает из-за проблем с сетью и т. д.