2012-02-20 14 views
1

私はrDNSを設定するために自分のウェブサイトを更新していますが、ここで私の問題をどのように処理するかについてあなたの意見を聞いています。私はすべてのIP(IPv4)を$aIPという配列に持っています。今、私はこのようなリストしている:今、私は現在のDNS逆値をHTMLからテキストを抽出する

<tr><td>1.2.3.4</td><td>hostname.bla.com</td><td><a href="edit-reverse.cgi?id=1">myserver.com</a></td></tr> 
<tr><td>1.2.3.5</td><td>hostname.bla.com</td><td><a href="edit-reverse.cgi?id=2"><i>not set</i></a></td></tr> 
<tr><td>1.2.3.6</td><td>hostname.bla.com</td><td><a href="edit-reverse.cgi?id=3"><i>not set</i></a></td></tr> 
<tr><td>1.2.3.7</td><td>hostname.bla.com</td><td><a href="edit-reverse.cgi?id=4">test.myserver.com</a></td></tr> 
<tr><td>1.2.3.8</td><td>hostname.bla.com</td><td><a href="edit-reverse.cgi?id=5"><i>not set</i></a></td></tr> 
<tr><td>1.2.3.9</td><td>hostname.bla.com</td><td><a href="edit-reverse.cgi?id=6"><i>not set</i></a></td></tr> 

を必要とする(この場合はmyserver.comまたはnot setまたはtest.myserver.comのいずれか)と私は値またはそれが(edit-reverse.cgi?id=1または1にリンク完全なURLが必要です)は、配列$aIPのIPアドレスにリンクされています。

これは、予想される出力(ない特に、この出力フォーマットでは、むしろ配列か何かであること)のようになります。

1.2.3.4 => 1, myserver.com 
1.2.3.5 => 2, not set 
1.2.3.6 => 3, not set 
1.2.3.7 => 4, test.myserver.com 
1.2.3.8 => 5, not set 
1.2.3.9 => 6, not set 

私が持っていないすべてのIPアドレスが$aIP配列であるかもしれないことを心に留めておいてください。ので、基本的にHTMLコードをループして$aIP配列に従って値を検索する必要があります。

私はregexを使うことを考えていましたが、私はそれらについて多くのことを知らないので、おそらく非常に非効率なコードになるでしょう。これを処理する最良の方法は何でしょうか?

+0

HTMLパーサーを使用してこのHTMLを解析することを検討しましたか? – Borealid

+1

http://simplehtmldom.sourceforge.net/ – Crontab

+0

あなたがしたくないことは、正規表現を使用することです。理由は次のとおりです:http://htmlparsing.com/regexes –

答えて

2

私はネイティブ関数を使用して、最適なソリューションを見つけた:

/*** a new dom object ***/ 
$dom = new domDocument; 

/*** load the html into the object ***/ 
$dom->loadHTML($html); 

/*** discard white space ***/ 
$dom->preserveWhiteSpace = false; 

/*** the table by its tag name ***/ 
$tables = $dom->getElementsByTagName('table'); 

/*** get all rows from the table ***/ 
$rows = $tables->item(0)->getElementsByTagName('tr'); 

/*** loop over the table rows ***/ 
foreach ($rows as $row) 
{ 
    /*** get each column by tag name ***/ 
    $cols = $row->getElementsByTagName('td'); 
    /*** echo the values ***/ 
    echo $cols->item(0)->nodeValue.'<br />'; 
    echo $cols->item(1)->nodeValue.'<br />'; 
    echo $cols->item(2)->nodeValue; 
    echo '<hr />'; 
} 

http://www.phpro.org/examples/Parse-HTML-With-PHP-And-DOM.html

おかげですべてで発見。