複数のURL(HTMLファイル)を配列に格納して、
find関数を使ってa要素を取り出したいのですが、
うまくいきません。
私の書いたプログラムファイルと対象となるファイルは
http://1811way.com/work008/test-sample.txt
です。
結果は、
「グーグルですYahoo!ですamazonです」
(&それぞれのトップページへリンク)
が得られればいいのですが、できません。
私の環境は
PHP5.3.8&MySQL5.5(localhostの環境でapache2.2&Windows7)
test.php を直していただけると助かります。
よろしくお願いします。
回答リクエストをもらいました。
基本的にはgizmo5さんの回答と同じですが、file_get_html()を繰り返し利用するときはメモリリークが発生し、そのまま続けると「セグメンテーション違反です」「zend_mm_heap corrupted」が発生してPHPプロセスが停止してしまうので、その回避のために意図してメモリを解放する必要があります。
<?php include_once('simple_html_dom.php'); $list = array( 'a1.html', 'a2.html', 'a3.html' ); foreach ($list as $url) { $html = file_get_html($url); $items = $html->find('a'); foreach ($items as $item) { echo $item; } $html->clear(); //オブジェクトに含まれる全ての要素を削除 unset($html); //オブジェクトを削除 } ?>
file_get_html は、ひとつの URL や文字列を処理するようになっているので、複数の URL を処理する場合にはループで回してあげる必要があります。
http://simplehtmldom.sourceforge.net/manual_api.htm
object file_get_html ( string $filename ) Creates a DOM object from a file or a URL.
ループの回し方と Aタグの内容の取り方はいろいろありますが、このような処理になると思います。
<?php include_once('simple_html_dom.php'); $list = array( 'a1.html', 'a2.html', 'a3.html' ); foreach($list as $url){ $html = file_get_html($url); $items = $html->find('a'); foreach($items as $item){ echo $item; } } ?>