При работе скрипта 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)
Новые темыОбъявленияСвободное общение
06:32 01.02. Апдейт 31.01 // Chrome готовит "чёрную метку" для ИИ? 
06:28 РСЯ и тормоза сайта: Яндекс начал штрафовать за плохой PageSpeed? 
23:09 Как безопасно купить Гугл почту? 
13:45 Какой движок выбрать для форума? 
13:43 Нашел скрины выплат с Сапы за 2010 год. Пошел плакать 
09:26 Трафик пробил дно? Худший январь за 10 лет и внезапный рост продаж с Bing 
19:27 Плагин ответа 
23:25 SOCKS5 приватные прокси на 30 дней для PayPal 
23:24 Google Voice аккаунты для бесплатных SMS и звонков 
23:23 PayPal аккаунты для любых целей 
23:02 BestX24 - быстрый и безопасный обменник криптовалют и электронных денежных средств 
20:21 CryptoGraph — Анонимный обмен криптовалют без KYC и AML 
12:09 Trustpilot Reviews | Подниму рейтинг вашей компании 
12:07 Купить отзывы на Яндекс и Гугл картах, на Авито, на Отзовике и IRecommend 
07:46 Moltbook: Соцсеть для ботов, где людям закрыли рот. Началось? 
06:26 Ставки на супер тренды в спорте 
22:31 [AI] Бот за $600к советовал есть сыр с крысами. Нью-Йорк его (наконец-то) снес 
22:30 Точные прогнозы на футбол 
13:38 Осталось 3-5 месяцев до блокировки YouTube в России, — заявил Клименко 
07:11 Список обновленных тем пуст... 
17:02 Gartner обещал смерть SEO к 2026 году. Открываем метрику и проверяем