Your IP : 216.73.216.240


Current Path : /home/juvelize/www/plugins/system/tsgrabber/
Upload File :
Current File : /home/juvelize/www/plugins/system/tsgrabber/tsgrabber.php

<?php
/**
* TsGrabber - Grabber RSS feeds
* @version 1.0.0
* @package TsGrabber
* @author Tsiba Oleksandr
* @email info@tsiba.net
* @copyright (C) 2012 tsiba.net - All rights reserved
* @license GNU/GPL: http://www.gnu.org/copyleft/gpl.html
*
**/
defined('_JEXEC') or die;

class plgSystemTsgrabber extends JPlugin
{
	function onAfterInitialise()
	{
            //die('Plugin');
            
            jimport('joomla.filesystem.file');
            $filename = JPATH_SITE.DS.'process.php';
           
            jimport('tsgrabber.settings');
            
            $Settings = new TSSettings();
            if(($Settings->block==0) || ($Settings->updatefeeds!='')){//Если не блокированна работа
                    
                /*
                 * 1. Ищем ленты не использующие глобальные настройки
                 *    1.1 Ленты с обновлением каждую загрузку
                 *    1.2 Ленты с обновлением в единицу времени
                 * 2. Среди лент использующих глобальные настройки
                 *    2.1 Обновление каждую загрузку
                 *    2.2 Обновление в единицу времени
                 */
                
                //1.0 Ленты с ручного обновления
                if($Settings->updatefeeds!=''){
                    $feeds10 = unserialize($Settings->updatefeeds);
                    $Settings->updatefeeds = '';
                    $Settings->save();
                }
                
                /*if((time()-strtotime($Settings->lastupdate))<($Settings->minutes*60) && (count($feeds10)==0)){
                     return true;
                }
                 * 
                 */
                
                //1.1 Ленты с обновлением каждую загрузку
                $db =& JFactory::getDBO();
                $query = "SELECT `id` FROM `#__tsgrabber_feeds` WHERE (`update`='1') and (`block`='0') ORDER BY `id` ASC";
		$db->setQuery($query);
                $feeds11 = $db->loadObjectList();
                
                //1.2 Ленты с обновлением в единицу времени
                $db =& JFactory::getDBO();
                $query = "SELECT `id`,`lastupdate`,`minutes` FROM `#__tsgrabber_feeds` WHERE (`update`='2') and (`block`='0') ORDER BY `id` ASC";
		$db->setQuery($query);
                $feeds = $db->loadObjectList();
                if(count($feeds)>0)
                foreach ($feeds as $feed){
                    if((time()-strtotime($feed->lastupdate))>($feed->minutes*60)){
                        $feeds12[]=$feed;
                    }
                }
                
                //2.1 Обновление каждую загрузку
                $db =& JFactory::getDBO();
                $query = "SELECT `id`,`lastupdate`,`minutes` FROM `#__tsgrabber_feeds` WHERE (`update`='3') and (`block`='0') ORDER BY `id` ASC";
		$db->setQuery($query);
                $feeds = $db->loadObjectList();
                if($Settings->update==1){
                    if(count($feeds)>0)
                    foreach ($feeds as $feed){
                            $feeds21[]=$feed;
                    }
                }
               
                //2.2 Обновление в единицу времени
                if($Settings->update==2){
                    if((time()-strtotime($Settings->lastupdate))>($Settings->minutes*60)){
                        if(count($feeds)>0)
                        foreach ($feeds as $feed){
                            $feeds22[]=$feed;
                        }
                    }
                }
                $feeds = null;
                
                if(count($feeds10)>0)
  
                foreach ($feeds10 as $feed){
                    $feeds[]=$feed;
                }

                if(count($feeds11)>0)
                foreach ($feeds11 as $feed){
                    $id = $feed->id;
                    $feeds[]=$id;
                }
                if(count($feeds12)>0)
                foreach ($feeds12 as $feed){
                    $id = $feed->id;
                    $feeds[]=$id;
                }
                if(count($feeds21)>0)
                foreach ($feeds21 as $feed){
                    $id = $feed->id;
                    $feeds[]=$id;
                }
                if(count($feeds22)>0)
                foreach ($feeds22 as $feed){
                    $id = $feed->id;
                    $feeds[]=$id;
                }
                if($this->Grabb($feeds)){
                    return true;
                } else{
                    return false;
                }

            }
            }
            function Grabb($feeds){
                /*
                $RG = new RssGrabber;
                $RG->parserss($url);
                die();
                */
                jimport('tsgrabber.feeds');
                jimport('tsgrabber.settings');
                
                if(count($feeds)>0){
                    $urls = array();
                    foreach ($feeds as $feed){
                        $Feed = new TSFeed($feed);
                        $urls[] = $Feed->url;
                        $Feed = NULL;
                    }

                    $Curl = new TSCurl();
                    $Curl->urls = $urls;
                    $titlefeeds = $Curl->GetContent(5120);
                    
                    $FEEDS=array();
                    $ConentMD5 = array();
                    foreach($feeds as $feed){
                        
                        $Feed = new TSFeed($feed);
                        $item = mb_strstr($titlefeeds[$Feed->url], '<item');
                        
                        $title = mb_strstr($item, '<title>');
                        $title = mb_substr($title, 7, mb_strpos($title, '</title>')-7);
                        $title = $this->FText($title);
                        
                        $pubDate = mb_strstr($item, '<pubDate>');
                        $pubDate = mb_substr($pubDate, 9, mb_strpos($pubDate, '</pubDate>')-9);
                        $pubDate = $this->FText($pubDate,true);
                        
                        $db =& JFactory::getDBO();
                        $query = "SELECT `md5` FROM `#__tsgrabber_content` WHERE `id_feed`='".$Feed->id."'";
                        $db->setQuery($query);
                        $CMD5 = $db->loadResultArray();

                        if(!in_array(md5($title.$pubDate), $CMD5)){
                            $FEEDS[] = $Feed;
                            $ConentMD5[$Feed->id]=$CMD5;
                            $Feed = null;
                            
                        }else{
                             $Feed->lastupdate = date('Y-m-d H:i:s', time());
                             $Feed->save();
                             $Feed = null;
                        }
                        
                        $Feed = NULL;
                    }
                }


                if(count($FEEDS)>0){

                foreach ($FEEDS as $feed){
                    $Feed = new TSFeed($feed);
                    $urls[] = $Feed->url;
                    $Feed = NULL;
                }

                $Curl = new TSCurl();
                $Curl->urls = $urls;
                $content = $Curl->GetContent(0);

                foreach ($FEEDS as $feed){
                    $Feed = new TSFeed($feed->id);
                   
                    if(($Feed->url!='') && ($Feed->menu!=0)&& ($Feed->category!=0)){

                        $rss = simplexml_load_string($content[$Feed->url]);
                        if(count($rss->channel->item)>0)
                        foreach ($rss->channel->item as $item) {
                            
                                $item->title=$this->FText($item->title);
                                $item->pubDate=$this->FText($item->pubDate, true);
                                
                                if((!in_array(md5($item->title.$item->pubDate), $ConentMD5[$Feed->id])) 
                                        && ($item->title!='')){                                        //ДОБАВЛЯЕМ МАТЕРИАЛ
                                     
                                        $current_cat = $Feed->category;
                                        if($item->category!=''){
                                            $current_cat = $this->GetCategoryId($item->category, $Feed->category, $Feed->id, $Feed->menu, $Feed->menutype, $Feed->user);
                                        }
                                        $alias = TSFeed::truncateText($this->convert($item->title), 15, '-', '');
                                        $text = '';
                                        if($Feed->link=='1'){
                                            $text = $text.$item->description.'<br><a href="'.$item->link.'" target="_blank">'.$Feed->linktext.'</a>';
                                        }else{
                                            $text = $item->description;
                                        }
                                                                               
                                        $text = mysql_escape_string($text);
                                        $db =& JFactory::getDBO();
                                        $query = 'INSERT INTO `#__content`
                                        (`id`, `asset_id`, `title`, `alias`, `title_alias`, 
                                        `introtext`, `fulltext`, `state`, `sectionid`, `mask`, 
                                        `catid`, `created`, `created_by`, `created_by_alias`, 
                                        `modified`, `modified_by`, `checked_out`, `checked_out_time`, 
                                        `publish_up`, `publish_down`, `images`, `urls`, `attribs`, 
                                        `version`, `parentid`, `ordering`, `metakey`, `metadesc`, 
                                        `access`, `hits`, `metadata`, `featured`, `language`, `xreference`) 
                                        VALUES (NULL, "0", "'.$item->title.'", "'.$alias.'", "", "'.$text.'", 
                                        "", "'.$Feed->public.'", "0", "0", "'.$current_cat.'", "'.$item->pubDate.'", "'.$Feed->user.'", "", 
                                        "0000-00-00 00:00:00", "0", "0", "0000-00-00 00:00:00", 
                                        "0000-00-00 00:00:00", "0000-00-00 00:00:00", "", "", "", 
                                        "1", "0", "0", "", "", "1", "0", "", "'.$Feed->featured.'", "*", "");';
                                        $db->setQuery($query);
                                        $db->query();
                                        $id_content = $db->insertid();
                                        
                                        $this->SaveContent($Feed->id, $id_content, $current_cat, $item->pubDate, md5($item->title.$item->pubDate));
                                        
                                        if($Feed->featured=='1'){

                                            $db =& JFactory::getDBO();
                                            $query = "SELECT `ordering`
                                                FROM  `#__content_frontpage` 
                                                WHERE 1 
                                                ORDER BY  `ordering` DESC 
                                                LIMIT 0 , 1";
                                            $db->setQuery($query);
                                            $orders = $db->loadObjectList();

                                            $db =& JFactory::getDBO();
                                            $query = "INSERT INTO  `#__content_frontpage` (
                                                `content_id` ,
                                                `ordering`
                                                )
                                                VALUES (
                                                '".$id_content."',  '".($orders[0]->ordering+1)."'
                                                );";
                                            $db->setQuery($query);
                                            $db->query();

                                        }
                                        
                                }
                                
                             $CountAll++;
                        }
                }
                    $Feed->lastupdate = date('Y-m-d H:i:s', time());
                    $Feed->save();
                    $Feed = NULL;
                   
                }
            }
            $Settings = new TSSettings();
            if($Settings->update=='1'){
                $Settings->lastupdate = date('Y-m-d H:i:s', time());
            }
            if(($Settings->update=='2') && (time()-strtotime($Settings->lastupdate))>($Settings->minutes*60)){
                $Settings->lastupdate = date('Y-m-d H:i:s', time());
            }
            $Settings->save();
            $Settings = NULL;
            return true;
            }
            
            function GetCategoryId($cat, $id, $feed, $menu, $menutype, $user){
                $cats = explode(',', $cat);

                foreach ($cats as $category){
                    $iscat = false;
                    $db =& JFactory::getDBO();
                    $query = "SELECT `id`, `title` FROM `#__categories` WHERE `parent_id`='".$id."'";
                    $db->setQuery($query);
                    $categories = $db->loadObjectList();
						
					$category = $this->FText($category);
					
                    foreach ($categories as $cat){
						$cat->title = $this->FText($cat->title);
                        $title = mb_strtoupper($cat->title);

                        if($title==mb_strtoupper(trim($category))){
                            $iscat = true;
                            return $cat->id;
                        }
                    }
                }
                $category = $cats[0];
                if($iscat==false){
                    $query = "SELECT `rgt` FROM `#__categories` WHERE `parent_id`='".$id."' ORDER BY `rgt` DESC";
                    $db->setQuery($query);
                    $rgts = $db->loadObjectList();
                    $rgt = $rgts[0]->rgt; //Порядок показа
                    
                    $query = "SELECT `rgt` FROM `#__categories` WHERE `id`='".$id."'";
                    $db->setQuery($query);
                    $rgts = $db->loadObjectList();
                    $rgt_main = $rgts[0]->rgt; //Порядок показа главной категории
                    
                    if($rgt==''){
                        $rgt = $rgt_main-1;
                    }
                    
                    $query = "SELECT `level`,`path`,`params`,`metadata` FROM `#__categories` WHERE `id`='$id'";
                    $db->setQuery($query);
                    $levels = $db->loadObjectList();
                    $level = $levels[0]->level+1; //Уровень
                    $path = $levels[0]->path; //Путь
                    $params= $levels[0]->params; //Параметры
                    $metadata= $levels[0]->metadata; //Параметры

                    //Создаем новую категорию
                    $category = $this->FText($category);
                    $alias = strtolower($this->convert($category));
                    $path = $path.'/'.$alias;
                    $query = "INSERT INTO `#__categories`
                        (`id`, `asset_id`, `parent_id`, `lft`, `rgt`, `level`, 
                        `path`, `extension`, `title`, `alias`, `note`, `description`, 
                        `published`, `checked_out`, `checked_out_time`, `access`, 
                        `params`, `metadesc`, `metakey`, `metadata`, `created_user_id`, 
                        `created_time`, `modified_user_id`, `modified_time`, `hits`, 
                        `language`)
                        VALUES (NULL, '0', '".$id."', '".($rgt+1)."', '".($rgt+2)."', '".$level."', '".$path."', 'com_content', 
                        '".$category."', '".$alias."', '', '', '1', '0', '0000-00-00 00:00:00', 
                        '1', '".$params."', '', '', '".$metadata."', '".$user."', '".date('Y-m-d H:i:s', time())."', '0', '0000-00-00 00:00:00', 
                        '0', '*');";
                    $db->setQuery($query);
                    $db->query();
                    $id_new = $db->insertid();
                    $query = "SELECT `lft` FROM `#__categories` WHERE `parent_id`='".$id."' ORDER BY `rgt` ASC";
                    $db->setQuery($query);
                    $lfts = $db->loadObjectList();
                    $lft = $lfts[0]->lft;
                    
                    $query = "UPDATE  `#__categories` SET  `lft` =  '".($lft-1)."', `rgt` =  '".($rgt_main+2)."' 
                        WHERE  `id` ='".$id."' ";
                    $db->setQuery($query);
                    $db->query(); //Для главной категории
                    
                    $query = "SELECT `asset_id` FROM `#__categories` WHERE `id`='".$id."'";
                    $db->setQuery($query);
                    $assests = $db->loadObjectList();
                    $asset_id = $assests[0]->asset_id;
                    
                    $query = "SELECT `rgt`,`level`,`parent_id`  FROM `#__assets` WHERE `id`='".$asset_id."'";
                    $db->setQuery($query);
                    $assests = $db->loadObjectList();
                    $assest_rgt = $assests[0]->rgt;
                    $assest_level = $assests[0]->level;
                    $assest_parent_id = $assests[0]->parent_id;
                    
                    $query = "INSERT INTO `#__assets`
                        (`id`, `parent_id`, `lft`, `rgt`, `level`, `name`, 
                        `title`, `rules`) VALUES (NULL, '".$asset_id."', '".$assest_rgt."', 
                        '".($assest_rgt+1)."', '".($assest_level+1)."', 'com_content.category.".$id_new."', '".$category."', '{\"core.create\":[],\"core.delete\":[],\"core.edit\":[],\"core.edit.state\":[],\"core.edit.own\":[]}');";
                    $db->setQuery($query);
                    $db->query();
                    $id_assest = $db->insertid();
                    
                    $query = "UPDATE  `#__categories` SET  
                        `asset_id` =  '".$id_assest."' 
                        WHERE  `id` = '".$id_new."'";
                    $db->setQuery($query);
                    $db->query();
                    
                    $this->SaveCategory($feed, $id_new);
                    
                    //Меняем ордер для всего остального
                    $query = "SELECT `id` FROM `#__categories` WHERE (`rgt`>='".($rgt_main-1)."') and (`parent_id`<>'".$id."') and (`id`<>'".$id."') and (`id`<>'1') and (`extension`='com_content')";
                    $db->setQuery($query);
                    $cats = $db->loadObjectList();
                    foreach($cats as $cat){
                        $query = "UPDATE  `#__categories` SET  
                        `lft` =  (`lft`+4), `rgt` =  (`rgt`+4)
                        WHERE  `id`='".$cat->id."'";
                        $db->setQuery($query);
                        $db->query();
                    }
                    
                    //Меняем ордер для главное категории
                    $query = "SELECT `rgt` FROM `#__categories` WHERE 1 ORDER BY `rgt` DESC";
                    $db->setQuery($query);
                    $rgts_root = $db->loadObjectList();
                    $rgt_root = $rgts_root[0]->rgt; //Порядок показа
                    
                    $query = "UPDATE  `#__categories` SET  `rgt` =  '".($rgt_root+1)."'
                        WHERE  `id` ='1' ";
                    $db->setQuery($query);
                    $db->query(); //Для коренной категории ROOT
                    //Меняем ордер для главное категории
                    
                    $this->AddMenu($id_new, $category, $alias, $menu, $feed);
                    
                    return $id_new;
                }
            }
            
            function AddMenu($id_cat, $category, $alias, $id_menu, $feed){
                    $db =& JFactory::getDBO();
                    $query = "SELECT `path`,`level`,`component_id`,`rgt`,`params`,`menutype`,`link` FROM `#__menu` WHERE `id`='$id_menu'";
                    $db->setQuery($query);
                    $menu = $db->loadObjectList();
                    $level = $menu[0]->level+1; //Уровень
                    $path = $menu[0]->path; //Путь
                    $component_id = $menu[0]->component_id; //Компонент
                    $lft = $menu[0]->rgt; //Левый
                    $rgt = $menu[0]->rgt+1; //Правый
                    $params = $menu[0]->params; //Параметры
                    $menutype = $menu[0]->menutype; //Тип меню
                    $link_menu= $menu[0]->link; //Тип меню
                    
                    if(strlen(stristr($link_menu,'index.php?option=com_content&view=archive'))>0)
                        $link = 'index.php?option=com_content&view=archive';
                    
                    if(strlen(stristr($link_menu,'index.php?option=com_content&view=categories&id='))>0)
                        $link = 'index.php?option=com_content&view=categories&id='.$id_cat;
                    
                    if(strlen(stristr($link_menu,'index.php?option=com_content&view=category&layout=blog&id='))>0)
                        $link = 'index.php?option=com_content&view=category&layout=blog&id='.$id_cat;
                    
                    if(strlen(stristr($link_menu,'index.php?option=com_content&view=category&id='))>0)
                        $link = 'index.php?option=com_content&view=category&id='.$id_cat;
                    
                    if(strlen(stristr($link_menu,'index.php?option=com_content&view=featured'))>0)
                        $link = 'index.php?option=com_content&view=featured';
                    
                    $category = $this->FText($category);
                    
                    $query = "INSERT INTO `#__menu`
                            (`id`, `menutype`, `title`, `alias`, `note`, `path`, 
                            `link`, `type`, `published`, `parent_id`, `level`, `component_id`, 
                            `ordering`, `checked_out`, `checked_out_time`, 
                            `browserNav`, `access`, `img`, `template_style_id`, 
                            `params`, `lft`, `rgt`, `home`, `language`, `client_id`) 
                            VALUES (NULL, '".$menutype."', '".$category."', '".$alias."', '', 
                            '".$path.'/'.$alias."', '".$link."',
                            'component', '1', '".$id_menu."', '".$level."', '".$component_id."', '0', '0', '0000-00-00 00:00:00', 
                            '0', '1', '', '0', '".$params."', '".$lft."', '".$rgt."', '0', '*', '0');";
                    $db->setQuery($query);
                    $db->query();
                    $id_new = $db->insertid();
                    $this->SaveMenu($feed, $id_new, $id_cat);
                    
                    return $id_new;
            }
            
            function FText($text, $date = false){
                if($date){
                    return date("Y-m-d H:i:s",strtotime($text));
                }
                
                $text=str_replace('<![CDATA[', '', $text);
                $text=str_replace(']]>', '', $text);
                $text = strip_tags($text);
                $text = str_replace(array('"','"'), '', $text);
                $text = trim($text);
                
                $first = mb_strtoupper(mb_substr($text, 0, 1));
                $text = $first.mb_substr($text, 1, mb_strlen($text)-1);
                return $text;
                
            }
            
            function SaveCategory($feed, $category){
                $db =& JFactory::getDBO();
		$query = "INSERT INTO  `#__tsgrabber_categories` (
                        `id_feed` ,
                        `id_category`
                        )
                        VALUES (
                        '".$feed."',  '".$category."'
                        );";
		$db->setQuery($query);
                $db->query();
                
            }
            
            function SaveMenu($feed, $menu, $cat){
                $db =& JFactory::getDBO();
		$query = "INSERT INTO  `#__tsgrabber_menu` (
                        `id_feed` ,
                        `id_menu`,
                        `id_cat`
                        )
                        VALUES (
                        '".$feed."',  '".$menu."',  '".$cat."'
                        );";
		$db->setQuery($query);
                $db->query();
                
            }
            
            function SaveContent($feed, $content, $cat, $date, $md5){
                $db =& JFactory::getDBO();
		$query = "INSERT INTO  `#__tsgrabber_content` (
                        `id_feed` ,
                        `id_content`,
                        `id_cat`,
                        `md5`,
                        `date`
                        )
                        VALUES (
                        '".$feed."',  '".$content."' ,  '".$cat."','".$md5."', '".$date."'
                        );";
		$db->setQuery($query);
                $db->query();
                
            }
            
            function convert($string)
            {
                $converter = array(
                    'а' => 'a',   'б' => 'b',   'в' => 'v',
                    'г' => 'g',   'д' => 'd',   'е' => 'e',
                    'ё' => 'e',   'ж' => 'zh',  'з' => 'z',
                    'и' => 'i',   'й' => 'y',   'к' => 'k',
                    'л' => 'l',   'м' => 'm',   'н' => 'n',
                    'о' => 'o',   'п' => 'p',   'р' => 'r',
                    'с' => 's',   'т' => 't',   'у' => 'u',
                    'ф' => 'f',   'х' => 'h',   'ц' => 'c',
                    'ч' => 'ch',  'ш' => 'sh',  'щ' => 'sch',
                    'ь' => "",  'ы' => 'y',   'ъ' => "",
                    'э' => 'e',   'ю' => 'yu',  'я' => 'ya',

                    'А' => 'A',   'Б' => 'B',   'В' => 'V',
                    'Г' => 'G',   'Д' => 'D',   'Е' => 'E',
                    'Ё' => 'E',   'Ж' => 'Zh',  'З' => 'Z',
                    'И' => 'I',   'Й' => 'Y',   'К' => 'K',
                    'Л' => 'L',   'М' => 'M',   'Н' => 'N',
                    'О' => 'O',   'П' => 'P',   'Р' => 'R',
                    'С' => 'S',   'Т' => 'T',   'У' => 'U',
                    'Ф' => 'F',   'Х' => 'H',   'Ц' => 'C',
                    'Ч' => 'Ch',  'Ш' => 'Sh',  'Щ' => 'Sch',
                    'Ь' => "",  'Ы' => 'Y',   'Ъ' => "",
                    'Э' => 'E',   'Ю' => 'Yu',  'Я' => 'Ya',
                );
                $string = strtr($string, $converter);
                $string = str_replace(' ', '-', $string);
                return $string;
            }
}

class TSCurl {
    
    public $urls = NULL;
    public $result = array();
    
    function GetContent($size = 0){
                    // инициализируем "контейнер" для отдельных соединений (мультикурл)
            $cmh = curl_multi_init();

            // массив заданий для мультикурла
            $this->result = array();
            // перебираем наши урлы
            foreach ($this->urls as $url) {
                    // инициализируем отдельное соединение (поток)
                    $ch = curl_init($url);
                    // если будет редирект - перейти по нему
                    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
                    // возвращать результат
                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                    // не возвращать http-заголовок
                    curl_setopt($ch, CURLOPT_HEADER, 0);
                    // таймаут соединения
                    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 100);
                    // таймаут ожидания
                    curl_setopt($ch, CURLOPT_TIMEOUT, 100);
                    // добавляем дескриптор потока в массив заданий
                    $this->result[$url] = $ch;
                    // добавляем дескриптор потока в мультикурл
                    curl_multi_add_handle($cmh, $ch);
            }

            // количество активных потоков
            $active = null;
            // запускаем выполнение потоков
            do {
                    $mrc = curl_multi_exec($cmh, $active);
            }
            while ($mrc == CURLM_CALL_MULTI_PERFORM);

            // выполняем, пока есть активные потоки
            while ($active && ($mrc == CURLM_OK)) {
                    // если какой-либо поток готов к действиям
                
                    //if (curl_multi_select($cmh) != -1) {
                        
                            // ждем, пока что-нибудь изменится
                            do {
                                
                                    $mrc = curl_multi_exec($cmh, $active);
                                    // получаем информацию о потоке
                                    $info = curl_multi_info_read($cmh);
                                    // если поток завершился
                                    
                                    if ($info['msg'] == CURLMSG_DONE) {
                                        
                                            $ch = $info['handle'];
                                            // ищем урл страницы по дескриптору потока в массиве заданий
                                            $url = array_search($ch, $this->result);
                                            // забираем содержимое
                                            if($size==0){
                                                $this->result[$url] = curl_multi_getcontent($ch);
                                            }else{
                                                $this->result[$url] = substr(curl_multi_getcontent($ch), 0, $size);
                                            }
                                            
                                           
                                            // удаляем поток из мультикурла
                                            curl_multi_remove_handle($cmh, $ch);
                                            // закрываем отдельное соединение (поток)
                                            curl_close($ch);
                                    }
                            }
                            while ($mrc == CURLM_CALL_MULTI_PERFORM);
                    //}
            }

            // закрываем мультикурл
            curl_multi_close($cmh);
            return $this->result;
    }
}