Всем доброго времени суток. Написал себе цмс, прикрутил парсер на CURL'е. При запуске парсинга данных с другого сайта весь сайт отдает 504 ошибку(парсер использует файлы ядра). Можно ли как-то убрать эту ошибку или нужно специально создавать отдельно проект с парсером? Заранее спасибо за ответ.
И сразу маленькое пояснение. Есть скрипт, который я называю цмс. В нем есть абстрактная модель, в ней - методы, через которые проходят запросы к БД и в целом работает сайт(раут и пр). Написал для всего этого добра парсер с использованием CURLa. Но при его запуске виснет весь сайт, главная, категории и пр. Собственно, вопрос - парсер выносить в полностью отдельный скрипт, который не использует методы, используемые на главной(метод, обрабатывающий запросы к мускулу и тп), или же есть способы упростить работу его?
$this->query($insert); - используется на всех страницах сайта, к примеру...
И сразу маленькое пояснение. Есть скрипт, который я называю цмс. В нем есть абстрактная модель, в ней - методы, через которые проходят запросы к БД и в целом работает сайт(раут и пр). Написал для всего этого добра парсер с использованием CURLa. Но при его запуске виснет весь сайт, главная, категории и пр. Собственно, вопрос - парсер выносить в полностью отдельный скрипт, который не использует методы, используемые на главной(метод, обрабатывающий запросы к мускулу и тп), или же есть способы упростить работу его?
Код |
---|
public function parse() { ini_set('max_execution_time', 0); ini_set('memory_limit', '128M'); $urls = array( "url1", "url2" ); //Инициализация $mh = curl_multi_init(); $chs = array(); foreach ( $urls as $url ) { $chs[] = ( $ch = curl_init() ); curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_HEADER, 0 ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); curl_multi_add_handle( $mh, $ch ); } $prev_running = $running = null; do { curl_multi_exec( $mh, $running ); if ( $running != $prev_running ) { // получаю информацию о текущих соединениях $info = curl_multi_info_read($mh); if(is_array($info)&&($ch=$info['handle']){ // получаю содержимое загруженной страницы $output = curl_multi_getcontent( $ch ); $content = '@регулярка выборки блока@s'; preg_match_all($content, $output, $matches); $count = count($matches['0'] if(!empty($matches)){ $count = count($matches['0'] for($i = 0; $i < $count; $i++){ //Получаем URL, текст и заголовок записи $url = '@регулярка урл@'; preg_match_all($url, $matches['0'][$i], $urlt); //Цена $pprice = '@регулярка для цены@'; preg_match_all($pprice, $matches['0'][$i], $pricet); $pphone = '@регулярка для телефона@'; preg_match_all($pphone, $matches['0'][$i], $phonet); $pphoto = '@регулярка для фото@'; preg_match_all($pphoto, $matches['0'][$i], $photot); if(!empty($urlt)){ $title = mysql_real_escape_string($urlt['3']['0'] $text = mysql_real_escape_string($urlt['2']['0'] $ourl = $urlt['1']['0']; if (!empty($pricet['0']) { $price = $pricet['1']['0']; } else { $price = 0; } if (!empty($phonet['0']) { $phone = $phonet['1']['0']; } else { $phone = 0; } if ((!empty($photot)) && ($photot['1']['0'] != '')) { $oimg = 1; } else { $oimg = 0; } $date = date("Y-m-d H:i:s"; $category = explode('/', $ourl); //4 $cat = 0; $subcat = 0; $prov = 0; if(($category['4'] == '')&&($prov != 1)){ $cat = 1; $subcat = 12; $prov = 1;}//большой список для разделения по квартирам if($this->urlsearch($ourl) != TRUE){ $insert = "INSERT INTO `table` SET значения"; $this->query($insert); if($oimg == 1){ $ch = curl_init(); // 2. указываем параметры, включая url curl_setopt($ch, CURLOPT_URL, 'url'.$ourl); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); // 3. получаем HTML в качестве результата $image = curl_exec($ch); // 4. закрываем соединение curl_close($ch); $img = '@регулярка@'; preg_match_all($img, $image, $imgm); $id = $this->lastId(); if(!empty($imgm)){ $count1 = count($imgm['1'] if($count1 >= 5) $count1 = 5; for($j = 0; $j < $count1; $j++){ $model = new Model_Admin(); $name = $model->getRandomFileNameParse($imgm['1'][$j] $image = Acimage::createImage($imgm['1'][$j] $image->drawLogo(IMG_PATH.DS.'theme'.DS.'logo.png', Acimage::BOTTOM_RIGHT) ->saveAsJPG($model->pathImgParse().DS.$name); $image->resize(150,150) ->saveAsJPG($model->pathImgParse().DS.'small'.DS.$name); $insert = "INSERT INTO `table` SET "; $this->query($insert); } } } } } } } } // обновляю кешируемое число текущих активных соединений $prev_running = $running; } } while ( $running > 0 ); foreach ( $chs as $ch ) { curl_multi_remove_handle( $mh, $ch ); curl_close( $ch ); } curl_multi_close($mh); $succes = new View(); $succes->view('admin'.DS.'parsesucces'); $succes->render(); } |
$this->query($insert); - используется на всех страницах сайта, к примеру...