2009-08-17 4 views
0

私はPHPを使用しています。2つのURLを指定して、実際に同じウェブサイトまたはウェブページを参照していることをどのように伝えますか?

は、彼らが実際には同じであることを伝えるためにどのようにこのような2つのURL、http://soccernet.comhttp://soccernet.espn.go.com/index?cc=4716

与えられましたか?

も差がhttps://gmail.comhttp://gmail.com

のようなHTTPSは、アドバイスしてくださいている状況を考えます。私はそれが正規表現を使用する際の闘いを見いだしています。時にはサッカーネットの例のように区別するのにはあまり適していないことがあるからです。

私はあらゆる種類の良いアイデアがあり、正規表現だけに限定されていません。

編集:下のすべてのコメントと回答に感謝します。確かなレベルを取得するための良いアイデアはどうですか?どのような要素を探すべきですか?どのように私はそれについて最も効率的な方法で行くのですか?

+0

「同じウェブページ」の意味を明確にしてください。まったく同じコンテンツですか?サーバーとまったく同じ要求ですか? –

+0

私は同じコンテンツを意味するわけではありません。申し訳ありませんが、私はサーバーファームやものに慣れていません。だから、私は同じサーバーを探していると思いますか?今私は、マーケティング上の理由から、いくつかはwww.abc.com?ref=ad2とwww.abc.com?ref=ad2を置くような問題があるかもしれないと理解していますが、私が探している方法は、彼らは同じウェブサイトを参照している可能性が高いと同じか、または示唆しています。 –

答えて

4

サッカーネットの例では、実際には各ページから得られる出力を比較せずに、これが可能だとは思えません。

0

これは一般的なケースでは判断できません。 http://server1/page.aspxhttp://server2/page.aspxは、server1とserver2の両方が同じIPアドレスにマップされている場合、同じページになる可能性があります。実際には、両方が同じサーバーファームにマップされている場合です。

実際、同じページであっても、リクエストに使用されたURLに基​​づいてページのレンダリングが異なると、コンテンツが完全に異なる可能性があります。

+0

しかし、あなたが言ったように、あなたはそれを判断することはできません。単に同じパスとIPを持っていても同じファイルであるということではなく、IPのパスとパスが違っていても同じではありません。 –

1

唯一の方法は、各ページをダウンロードして比較することです。

平均的なHTMLファイルがかなり小さい(通常100KB以下)ため、これはあまり問題にならないはずです。参照ファイルをすべてダウンロードする必要はありません。

+0

ページの内容がURLにまったく依存していないと、それは役に立たないかもしれません。 –

+0

オフサイトのページは両方でオフサイトに参照される必要があります(どちらかと仮定します)、相対リンクは同じにする必要があります。よく作られたサイトでは、相対的なリンクはサイトのドメインを含むべきではありませんが、私はそのようなサイトがあることを認めます...しかし、これには完璧な解決策はありません。 –

+0

OPが同じ* content *を探している場合は、ページ上のすべてのJavascriptを実行してすべての参照ファイルをダウンロードする必要があります。 – Imagist

0

もしあなたがHEAD要求を発行した後にファイルサイズを比較することができますが、あなたが望むものを正確に与えるわけではありません。

HEADリクエストを実行した後、ファイルサイズが同じであれば、比較するコンテンツを取得できます。ここで

はHEADリクエストを行う上でいくつかの情報です:

http://www.eggheadcafe.com/tutorials/aspnet/2c13cafc-be1c-4dd8-9129-f82f59991517/the-lowly-http-head-reque.aspx

+0

"Hello world!"と "さようなら!"内容の長さは同じです。現実には、これだけでは大したことではありません。偽陽性の余地があまりにもあります。 –

+0

コンテンツを持っている場合は、コンテンツを比較するのではなく、ファイルサイズを比較するのはなぜですか? – Imagist

+0

私はそれが誤字だと思う。 HEAD要求はコンテンツを送信しませんが、(サーバーがそれ自身を動作させる場合は)Content-Lengthヘッダーを送信します。 –

0

soccernet.comとsoccernet.espn.go.com完全に異なるURLです。プログラムがsoccernet.comにHTTPにアクセスして、soccernet.espn.go.comにリダイレクトされていることに気付く必要がある非常に特殊なケースです。あなたの場合は実行可能ですか?

0

HTTP HEADリクエストを使用して、ページが別の場所にリダイレクトされているかどうかを判断できます。 は実際のレスポンスファイルを比較することができますが、ESPNのようなWebサイトでも、javascriptと広告の追跡のために同じURLであってもほとんど同じ内容で応答することはありません。

get_headers()関数を使用し、 'Location'キーに再帰的に従います。したがって、 'soccernet.com'は ''にリダイレクトされ、 'http://soccernet.espn.go.com/index'にリダイレクトされます。クエリ文字列を無視すると、このURLと他のURLは同じです。

print_r(get_headers('http://soccernet.espn.go.com/archive/'),1) 
+0

これはhttpSとhttpの状況でも動作しますか? –

+0

はい。しかし、問題を繰り返すと、 "..."セクションは2つのURLの間で異なり、さらに2回同じURLがチェックされます。 http://gmail.com - > http://mail.google.com/mail/ - > https://www.google.com/accounts/ ... https://gmail.com - > https://mail.google.com/mail/ - > https://www.google.com/accounts/ ... – ACoolie

0

多分あなたのお友達です。それはリダイレクトlike thisに従うことができます。

関連する問題