Ошибка из-за переменной области в PHP - PullRequest
0 голосов
/ 13 февраля 2012

У меня есть следующий код

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. Пожалуйста, помогите.

Ответы [ 5 ]

3 голосов
/ 13 февраля 2012

В начале scraping_digg функция объявляет переменную:

$ret = array();
1 голос
/ 13 февраля 2012

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

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

1 голос
/ 13 февраля 2012

Я думаю, вы не инициализируете $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 голос
/ 13 февраля 2012

Это потому, что $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 голос
/ 13 февраля 2012

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

 $ret[] = $item;

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

$ret=array();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...