При работе скрипта CURL сайт выдает ошибку 504
Страницы: 1
При работе скрипта CURL сайт выдает ошибку 504
Всем доброго времени суток. Написал себе цмс, прикрутил парсер на CURL'е. При запуске парсинга данных с другого сайта весь сайт отдает 504 ошибку(парсер использует файлы ядра). Можно ли как-то убрать эту ошибку или нужно специально создавать отдельно проект с парсером? Заранее спасибо за ответ.
И сразу маленькое пояснение. Есть скрипт, который я называю цмс. В нем есть абстрактная модель, в ней - методы, через которые проходят запросы к БД и в целом работает сайт(раут и пр). Написал для всего этого добра парсер с использованием 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'&#93){
                // получаю содержимое загруженной страницы
                $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'&#93) {
                        $price = $pricet['1']['0'];
                       } else {
                        $price = 0;
                       }
                      if (!empty($phonet['0'&#93) {
                        $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); - используется на всех страницах сайта, к примеру...
Цитата
Иван пишет:
В нем есть абстрактная модель, в ней - методы, через которые проходят запросы к БД и в целом работает сайт(раут и пр).
Сложно так сказать да и времени потребует. Единственно, за что внимание зацепилось - абстрактные методы лишь описывают, но не могут содержать реализации и сама реализация определяется в дочернем классе ( в методах дочернего), например, и область видимости должна совпадать или быть менее строгой.

Имхо.
Разобрался в чем была проблема. При запуске скрипта и до окончания его выполнения блокировался файл сессии, что не давало скрипту для данной сессии выполнить что либо. Вопрос решен, спасибо за Ваше сообщение... В будущем все равно вынесу в отдельный скрипт
Цитата
Иван пишет:
Вопрос решен, спасибо за Ваше сообщение...
Пожалуйста =)  Хорошо, что нашли причину.
Страницы: 1
Похожие темы:
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)
Новые темыОбъявленияСвободное общение
02:28 Кто как борется с ботами ПФ? 
20:51 Webvork - международная товарная СРА сеть с сертифицированными офферами на Европу. 
17:27 DreamCash.tl - заработок на онлайн-видео. До 95% отчислений, отличный конверт! 
14:20 Партнерская программа OWNR WALLET 
11:17 Новая поисковая система от OpenAI 
08:07 Самозанятые смогут зарабатывать в рекламной сети VK 
07:57 А ты жарил? АПдейт Яндекс выдача 11 мая 2024 
20:29 Заказать отзывы, купить отзывы. 
18:27 Сервис ReCaptcha 2, 30р за 1000 решений. 
18:00 Услуги рассылки Viber|Whatsapp|IMO. 
18:00 Услуги рассылки Вконтакте 
17:59 Рассылка в TELEGRAM |Большой опыт работы | Любые тематики | Лучшая конверсия 
17:58 Прием платежей для HIGH RISK | Прием платежей без сайта 
15:04 Ручное размещение вечных статей и ссылок на хороших площадках. Опыт 15 лет! 
00:04 Ням-ням! - 8 деликатесов, которые когда-то ели только бедные люди 
11:40 Кто сделает прогон для адалт сайта? 
09:25 Добро пожаловать в цифровой мир... 
10:31 Видимо, похороны СУПРа уже прошли как-то по-тихому 
08:08 С юмором по жизни! 
08:02 Жизнь за границей, куда переехать. 
07:58 Точные прогнозы на футбол