私は自分のウェブサイトのサイトマップを作成しようとしているので、基本的にはホームページのリンクをスキャンしてリンクを抽出し、抽出されたリンクに対して同じことを再帰的に行います
function get_contents($url = '' ) {
if($url == '' ) { $url = $this->base_url; }
$curl = new cURL;
$content = $curl->get($url);
$this->get_links($content);
}
public function get_links($contents){
$DOM = new DOMDocument();
$DOM->loadHTML($contents);
$a = $DOM->getElementsByTagName('a');
foreach($a as $link){
$h = $link->getAttribute('href');
$l = $this->base.'/'.$h;
$this->links[] = $l ;
$this->get_contents($l);
}
}
それは正常に動作しますが、いくつかの問題があります
1-
私はいくつかのリンクを取得します
www.mysite.com/http://www.external.com
私は何かをすることができます
if( stripos( $link , 'http') !== false
||
stripos( $link , 'www.') !== false
||
stripos( $link , 'https') !== false
)
{
if(stripos( $link , 'mysite.com') !== false)
{
//ignor this link (yeah i suck at regex and string mapping)
}
}
しかし、それは非常に複雑で遅いようです.リンクが外部リンクであるかどうかを調べるための標準的でクリーンな方法はありますか?
2 -
相対パスを処理する方法はありますか? 私はいくつかのようなものを得ます
www.mysite.com/../Domain/List3.html
明らかにこれは正しくありません。リンクから (../) を削除できますが、すべてのリンクでは機能しない可能性があります。とにかく、リンクの完全なアドレスを見つける方法はありますか?