2011-08-10 8 views
0

これはおそらく、説明するのはかなり難しいですので、私は可能な限りシンプルにしてみましょう:

ここに私のコードは次のとおりです。

<?php 

$ref = $_SERVER['HTTP_REFERER']; 

switch($ref) { 
    case "http://www.facebook.com": 
    $ref_name = "Facebook"; 
    break; 
    case "http://www.twitter.com": 
    $ref_name = "Twitter"; 
    break; 
} 

?> 

私が知っているから、HTTP_REFERERは(全体の参照元URLを引っ張ります例えばwww.facebook.com/abc/xyz/mno=prq)をトップレベルドメインと反対に使用します。 $refと何かを照合して、http://static.facebook.com(サブドメイン)かhttp://www.facebook.com/profile_id/bla(トップレベルドメインの後ろに追加のフォルダとパラメータを持つURL)のいずれかのリファラーが"http://www.facebook.com"の値を持つようにしたいと考えています。

これを行う最も簡単で効果的な方法は何ですか?

どのようなコメント/回答なども大歓迎です:)!

答えて

3

参照:parse_url

$ref = 'http://static.facebook.com'; 

$host = implode('.', array_slice(explode('.', parse_url($ref, PHP_URL_HOST)), -2)); 
switch ($host) { 
    case 'facebook.com': 
     break; 

    case 'twitter.com': 
     break; 
} 

更新:あなたは特別のTLDを扱っている場合Root Zone Databaseを見てください。

+0

これは良い第一歩ですが、まだ問題は解決していません。 'static.facebook.com'や' facebook.com'はどうでしょうか?別の複雑さを追加したい場合は、簡単な抽出プロセスで '.co'が得られる(架空の)' facebook.co.uk'を考えてみましょう。 –

+0

ありがとうYoshi! @Pekka、 'static 'や' www.'などにワイルドカードを描くことは可能でしょうか? – Avicinnian

+0

これは 'co.uk'のようなtldではうまくいきません。私はこれを100%稼働させるために、tldのリストを使用しなければならないと思います。 – Yoshi

関連する問題