curl_multi_add_handle максимальное значение URL

Discussion in 'PHP' started by .::BARS::., 13 Jul 2012.

  1. .::BARS::.

    .::BARS::. Elder - Старейшина

    Joined:
    13 Oct 2007
    Messages:
    379
    Likes Received:
    45
    Reputations:
    10
    Всем привет.. нужно пропарсить 1млн страниц... решил парсить с помошью курл по 100 потоков

    задаю в массив сразу все 1млн юрлов и лезет ошибка

    погуглив по ошибке ничего не нашел... понял что если задавать курлу не 1млн юрлов а к примеру 10к, то все работает прекрасно.

    возможно это ограничение на количество элементов в массиве?

    как предложите обойти такой косяк?

    юрлы добавляются в массив банально

    PHP:
    for($i=3000000;$i<=4000000;$i++){
        
    $urls[$i]='http://site.ru/'.$i;

    строки с 16 по 31

    PHP:
    foreach ($urls as $url) {
        
    $ch curl_init($url);
        
    //echo $url.'<br>';
        
    curl_setopt($chCURLOPT_URL,$url);
        
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);
        
    curl_setopt($chCURLOPT_REFERER'http://site.ru/');
        
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
        
    curl_setopt($chCURLOPT_USERAGENT"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
        
    curl_setopt($chCURLOPT_COOKIEFILE'./cookie'); 
        
    curl_setopt($chCURLOPT_COOKIEJAR,  './cookie'); 
        
    curl_setopt($chCURLOPT_HEADER0);
        
    curl_setopt($chCURLOPT_CONNECTTIMEOUT1);
        
    curl_setopt($chCURLOPT_TIMEOUT1);
        
    $tasks[$url] = $ch;
        
    curl_multi_add_handle($cmh$ch);
    }
     
  2. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    Вот этот код (твой), который парсит мультикурлом, заверни в функцию. Которая будет принимать как один из аргументов - массив ссылок ($urls), а возвращать массив результатов (я незнаю, что тебе нужно, если целые страницы, то массив целых страниц, если только какой-то конкретно другой контент, то его).

    Назовем эту функцию, например, funkciya_parsinga(). Теперь вызывай ее вот так:


    PHP:
    function funkciya_parsinga($urls)
    {
    ...
    return 
    $results;
    }

    $i 0;
    $potokov_za_raz 10000;
    $rezultaty = array();

    for (
    $i 0$i ceil(count($urls) / $potokov_za_raz); $i++)
    {
        
    $rezultaty array_merge($rezultatyfunkciya_parsinga(array_slice($urls$i*$potokov_za_raz$potokov_za_raz)));
    }
     
    #2 |qbz|, 13 Jul 2012
    Last edited: 13 Jul 2012
    1 person likes this.
  3. .::BARS::.

    .::BARS::. Elder - Старейшина

    Joined:
    13 Oct 2007
    Messages:
    379
    Likes Received:
    45
    Reputations:
    10
    |qbz|, разобрался уже, но все равно спасибо!