2016-08-25 2 views
0

Я разработал веб-скребок на одном сервере, который работает и делает то, что я хочу, чтобы он делал. Теперь я должен реализовать его в другой среде, и я наткнулся на проблему, которую у меня не было при разработке, и мне сложно идентифицировать ее.Функция PHP/Ajax Anonymous, итерация вызывает ошибку? + как показать стандартные ошибки PHP при использовании Ajax

Единственная ошибка, я должен пойти на это (от JS консоли):

POST http://my.cool.page/pro/company/scrape 502 (Bad Gateway) 

Сервер развития (где он работает) использует PHP 5.4.16, сервер реализации на PHP 5.4.45 , Я использую те же версии внешнего кода на обоих серверах.

Условия для запуска скребка немного отличаются в реализации, теперь он загружается через Ajax, а не как его собственную страницу.

Аякса вызов:

$("#showScraperButton").click(function(){ 
      $.post('/pro/company/scrape', 
      { 
       'url': url 
      }, 
      function(result){ 
       //code... 
      } 
      ); 
     }); 

Функция + чехол для соскабливания якоря теги, используя Fabpot/Goutte:

function _getTagContent($crawler = '', $toScrape = '', $contentPatterns = '') 
    { 
     $tagContent = array(); 
     ChromePhp::log("Hello _getTagContent"); 
     foreach($toScrape as $tag) { 
      $i = 0; 
      switch ($tag) { 
      case 'a': 
       $n = $i; 
       $crawler->filter($tag)->each(
       function ($node) use(&$tagContent, &$n, &$tag, &$crawler) 
       { 
        $nodeText = trim($node->text()); 
        $tagContent[$tag][$n]['value'] = $nodeText; 
        $linksCrawler = $crawler->selectLink($nodeText); 
        try { 
         $link = $linksCrawler->link(); 
         $magicDidHappen = true; 
        } 

        catch(Exception $e) { 
         $magicDidHappen = false; 
        } 

        if ($magicDidHappen) { 
         $uri = $link->getUri(); 
        } 
        else { 
         $uri = $node->attr('href'); 
        } 

        $tagContent[$tag][$n]['uri'] = $uri; 
        $n++; 
       }); 
       break; 

      default: 
       break; 
      } 
     } 
     return $tagContent; 
    } 

Это приводит к ошибке, описанной выше.

закомментировав каждую строку в случае, я обнаружил, что ошибка не отображается до тех пор,

$n++; 

не называется. Если

$n++; 

НЕ включено, последний элемент действительно присутствует в $ tagContent.

Это привело меня к мысли, что попытка итерации является проблемой в этом случае и что код в противном случае не вызывает ошибок. Затем я попробовал с другим тегом HTML, используя схожий синтаксис:

case 'h3': 
    $n = $i; 
    $crawler->filter($tag)->each(
    function ($node) use(&$tagContent, &$n, &$tag) 
    { 
     $tagContent[$tag][$n] = trim($node->text()); 
     $n++; 
    }); 
break; 

Однако, это работает, как задумано, давая мне все 40 экземпляров h3 на странице я выскабливание.

Из этого у меня есть несколько вопросов: Пожалуйста, помогите? Может ли это быть связано с версиями PHP? Есть ли способ распечатать «стандартные» ошибки PHP при выполнении вызовов Ajax (вместо/в дополнение к кодам ответов HTTP), так как я уверен, что там есть намек на то, что не удается. Большое спасибо за любую помощь!

ответ

0

Он теперь работает с использованием

case 'a': 
       $crawler->filter($tag)->each(
       function ($node, $n) use (&$tagContent, &$tag, &$crawler) 
       { 

        $nodeText = trim($node->text()); 


        $tagContent[$tag][$n]['value'] = $nodeText; 

        $linksCrawler = $crawler->selectLink($nodeText); 

        try { 
         $link = $linksCrawler->link(); 
         $magicDidHappen = true; 
        } 

        catch(Exception $e) { 
         $magicDidHappen = false; 
        } 

        if ($magicDidHappen) { 
         $uri = $link->getUri(); 
        } 
        else { 
         $uri = $node->attr('href'); 
        } 

        $tagContent[$tag][$n]['uri'] = $uri; 
        $n++; 

       }); 
       break; 

Переехал $ п из заявления, используя() и в параметрах функции. Я считаю, что ChromePhp может вызвать некоторые проблемы. Все еще не знаю, что пошло не так. Но теперь это работает ...

Смежные вопросы