0

私は自分のウェブサイトのサイトマップを作成しようとしているので、基本的にはホームページのリンクをスキャンしてリンクを抽出し、抽出されたリンクに対して同じことを再帰的に行います

  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

明らかにこれは正しくありません。リンクから (../) を削除できますが、すべてのリンクでは機能しない可能性があります。とにかく、リンクの完全なアドレスを見つける方法はありますか?

4

1 に答える 1

2

相対パスについては、次をご覧くださいrealpath()

たとえば、ドメインを取得するために使用parse_url()すると、ドメインが自分のドメインと等しいかどうかを簡単に確認できます。parse_url()SCHEME を定義する必要があることに注意してください。http[s] がない場合は http:// を追加してください。

于 2012-11-29T15:47:36.707 に答える