alahesia / rolling-curl

Automatically exported from code.google.com/p/rolling-curl
0 stars 0 forks source link

Дополнительные данные в $info #9

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
Хорошо бы в info , который передается в callback 
было еще 
1. uri , с которого скачан данный контент
2. номер (индекс массива) этого урла в 
масcиве $urls , который мы передали
на скачку.

Часто надо выстроить принятые данные в том 
же порядке, что и урлы,
переданные скрипту на скачивание. Сейчас 
то, что скачалось быстрее, будет
первым, если в callback-функции делать распарс 
страницы и занесение в
глобальную переменную-массив.

Original issue reported on code.google.com by slide...@gmail.com on 19 May 2010 at 5:09

GoogleCodeExporter commented 9 years ago
Сорри, "слона-то я и не приметил", урл есть в 
$info
Но номер его все-таки нужен.

Original comment by slide...@gmail.com on 21 May 2010 at 7:18

GoogleCodeExporter commented 9 years ago
Можно так:

Функцию добавления сделать такую:
public function add($request) {
     $this->requests[] = $request;
     $this->requests_urls[] = $request->url;
     return true;
}

и после $info = curl_getinfo($done['handle']);
добавить
$info['order'] = array_search($info['url'], $this->requests_urls);

Original comment by slide...@gmail.com on 21 May 2010 at 7:37

GoogleCodeExporter commented 9 years ago
Не, так не пойдет, ибо CURLOPT_FOLLOWLOCATION отрезает 
возможность иметь в $info изначальный url. А он, 
или его ключ нужен для обработки инфы.

Надо все таки как-то передавать ключ 
массива, но пока не придумал как. Сложость 
заключается в том, что передаточным звеном 
информации служит курл, а ему не передашь 
ненужные данные.

Original comment by andy.pru...@gmail.com on 2 Sep 2010 at 7:30

GoogleCodeExporter commented 9 years ago
Тоже столкнулся с проблемой, когда 
CURLOPT_FOLLOWLOCATION = 0. 
1) В функции rolling_curl
в цикле for ($i = 0; $i < $this->window_size; $i++) записываю в 
массив хендл сеанса: $chArr[] = $ch;

2) В while($done = curl_multi_info_read($master)) уже ищу в 
массиве не по урлу, а по хэндлу:
$order = array_search($done['handle'], $chArr);

3) И также ниже опять добавляю хэндл в 
массив, при добавлении нового сеанса  $chArr[] = 
$ch;

4) возвращаю call_user_func($callback, $output, $info, $order); 

Original comment by AShkarpe...@gmail.com on 3 Sep 2010 at 6:11

GoogleCodeExporter commented 9 years ago
1. да, спасибо, как вариант можно юзать, но я 
пока "стесняюсь" в каждом потоке пользовать 
array_search.
Надо бы придумать менее затратный способ.

2. кста в либе не реализовано добавление 
новых потоков, в процессе работы, решал эту 
проблему?

3. еще эта вечная проблема курла с прокси, 
когда параметры CURLOPT_TIMEOUT and CURLOPT_CONNECTTIMEOUT 
работают только на отрезке proxy->url, а на 
отрезке curl->proxy не отрабатывают. 

Original comment by it78...@gmail.com on 4 Sep 2010 at 5:59

GoogleCodeExporter commented 9 years ago
This issue was closed by revision r20.

Original comment by alexander.makarow on 12 Sep 2010 at 8:39