PHP调用成员函数find()

时间:2014-04-11 07:11:43

标签: php parsing

Code on pastebin

Link on test page

代码:

require_once('simple_html_dom.php');

$file = 'http://testwork.ru/Tempp/domains.php'; // page with table

$SymbolsCountMin = 0;
$SymbolsCountMax = 10;

$SymbolsBackLis = array('-','_','.','0','1','2','3','4','5','6','7','8','9');

$ArrTr = array();
$ArrTd = array();

$ch = curl_init($file);

curl_setopt($ch, CURLOPT_URL, $file );

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/x-www-form-urlencoded'
    ));

    $html = curl_exec($ch);
    //$responseInfo = curl_getinfo($ch);
    curl_close ($ch);

    //var_dump($html);

//$html = file_get_html('http://testwork.ru/Tempp/domains.php');

// Find all tr 
$row = 0;
foreach($html->find('tr') as $tr){
    if($row!=0){
        $row++;
        $column = 0;
        foreach($tr->find('td') as $td){
            $column++;
            $text = $td->plaintext;

            $ArrTd[$column] = $text;
        }
    }
    if(iconv_strlen($ArrTd[0]) > $SymbolsCountMin && iconv_strlen($ArrTd[0]) < $SymbolsCountMax && !in_array($ArrTd[0], $SymbolsBackList)){
        $ArrTr[$row] = $ArrTd;
    }
}

$c = '';

foreach($ArrTr as $arr_tr =>$ftr){
    $c .='<tr>';
    foreach($ftr as $arr_td =>$ftd){
        $c .='<td>';
        $c .= $ftd;
        $c .='<td>';
    }
    $c .='</tr>';
}

$row_header = '    
<table style="text-align:center;">
';

$row_header .= $c;

$row_header .= '
</table>';

echo $row_header;

我收到错误 Fatal error: Call to a member function find() on a non-object in /var/www/seo-main/data/www/testwork.ru/Tempp/parse_domains.php on line 34

请告诉我,为什么我得到错误以及如何正确?

2 个答案:

答案 0 :(得分:0)

find()是。的成员函数 http://simplehtmldom.sourceforge.net/

您已注释掉

$html = file_get_html('http://testwork.ru/Tempp/domains.php');

使用CURL,它将返回html内容而不是已解析的数据。

如果您打算使用CURL,请使用

$html_data = curl_exec($ch);
curl_close ($ch);
$html = str_get_html($html_data ); // using the returned html from curl to the parser

然后执行解析部分的其余部分。

答案 1 :(得分:0)

您需要像这样编辑代码:

// Find all tr 
$row = 0;
if(!$html) { // check if $html does exists
foreach($html->find('tr') as $tr){
    if($row!=0){
        $row++;
        $column = 0;
        foreach($tr->find('td') as $td){
            $column++;
            $text = $td->plaintext;

            $ArrTd[$column] = $text;
        }
    }
    if(iconv_strlen($ArrTd[0]) > $SymbolsCountMin && iconv_strlen($ArrTd[0]) < $SymbolsCountMax && !in_array($ArrTd[0], $SymbolsBackList)){
        $ArrTr[$row] = $ArrTd;
    }
}
}

或使用try和catch语句