2012-02-13 3 views
0

У меня есть следующий кодОшибка из-за переменной сферы в PHP

function scraping_digg() { 
    // create HTML DOM 
    $html = file_get_html('http://digg.com/'); 

    // get news block 
    foreach($html->find('div.news-summary') as $article) { 
     // get title 
     $item['title'] = trim($article->find('h3', 0)->plaintext); 
     // get details 
     $item['details'] = trim($article->find('p', 0)->plaintext); 
     // get intro 
     $item['diggs'] = trim($article->find('li a strong', 0)->plaintext); 

     $ret[] = $item; 
    } 

    // clean up memory 
    $html->clear(); 
    unset($html); 

    return $ret; 
} 

Когда я запускаю его я получаю следующее сообщение об ошибке.

Undefined variable: ret in /opt/lampp/htdocs/web_scrapper/example/scraping/example_scraping_digg.php on line 

Я не могу найти исправление для области $ ret. Пожалуйста помоги.

+0

У компании Digg нет API-интерфейса? Это потому, что $ html-> find ('div.news-summary') не дает никаких результатов? – 472084

+0

Да. Это div.news-summary не работает. Я изменил его на то, что есть сейчас. Тогда это работает. И $ ret = array() также помог мне избавиться от ошибки. – Dewsworld

+0

Вы уверены, что '$ html-> find ('div.news-summary')' не возвращает пустой массив? – Eugene

ответ

3

В beggining из за scraping_digg функции объявить переменные:

$ret = array(); 
+0

Дополнительная информация: http://php.net/manual/en/language.variables.scope.php –

1

Номер строки будет наиболее важной информацией!

$ret[] = $item; 

Эта линия, вероятно, вызовет уведомление, в начале функции добавить что-то вроде

$ret=array(); 
1

Its, потому что $ret неопределен ...

попробуйте объявить $ret до вашего цикла

function scraping_digg() { 
    // create HTML DOM 
    $html = file_get_html('http://digg.com/'); 
    $ret = array(); 

    // get news block 
    foreach($html->find('div.news-summary') as $article) { 
     // get title 
     $item['title'] = trim($article->find('h3', 0)->plaintext); 
     // get details 
     $item['details'] = trim($article->find('p', 0)->plaintext); 
     // get intro 
     $item['diggs'] = trim($article->find('li a strong', 0)->plaintext); 

     $ret[] = $item; 
    } 

    // clean up memory 
    $html->clear(); 
    unset($html); 

    return $ret; 
} 
1

Я думаю, что вы не инициализируете оба $ret и $item внутри функция объем.

function scraping_digg() { 
     // create HTML DOM 
     $html = file_get_html('http://digg.com/'); 
     $ret = array(); 
     // get news block 
     foreach($html->find('div.news-summary') as $article) { 
      $item = array(); 
      // get title 
      $item['title'] = trim($article->find('h3', 0)->plaintext); 
      // get details 
      $item['details'] = trim($article->find('p', 0)->plaintext); 
      // get intro 
      $item['diggs'] = trim($article->find('li a strong', 0)->plaintext); 

      $ret[] = $item; 
     } 

     // clean up memory 
     $html->clear(); 
     unset($html); 

     return $ret; 
    } 
1

Я не мог даже найти div с классом news-summary на главной странице Digg в. То, что цикл foreach, вероятно, никогда не будет выполнен, потому что PHP не смог найти ни один из div, который вы ищете. Таким образом, $ret никогда не объявляется.

Однако вы могли бы добавить $ret = array(); в верхней части функции, как указано в его ответе hsz, чтобы сообщение об ошибке исчезло.

+0

Да. новостей-резюме нет. Я использовал образец из библиотеки, поэтому я не смог его получить. Но $ ret = array() действительно полезен. – Dewsworld

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