Всем доброго времени суток. Написал себе цмс, прикрутил парсер на 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); - используется на всех страницах сайта, к примеру...
