2

検索エンジンのトラフィックのみにGoogleAdSense広告を表示し、直接またはFacebook、Twitter、電子メールリンクなどからアクセスする通常の訪問者には広告を表示したくない...

これが私が現在使用しているコードで、問題なく動作しているようですが、Bing、Yahoo、AskなどのGoogleに加えて、他の多くの検索エンジンを含めるようにコードを改善したいと思います。以下のコードを見ていただけませんか。改善して修正しますか?

<?php
$ref = $_SERVER['HTTP_REFERER'];
if (preg_match("(google|yahoo|bing)", $ref) != false) {
echo <<<END
<script type="text/javascript"><!--
google_ad_client = "xx-xx-xxxxxxxxxxxxxxxxxx";
/* xxxxxxxx xxxxxx xxx xxx xxx xx xxxxxx */
google_ad_slot = "xxxxxxxxxxxxxx";
google_ad_width = xxx;
google_ad_height = xxx;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>
END;
}
else {
     echo ""
;
}
?>
4

1 に答える 1

4

コードはかなり良さそうです。私の提案は、パターンの区切り文字として/ではなく、ペアを使用することです。これは、ペアもマッチグループに使用できるためです。(フラグを追加iして、一致の大文字と小文字を区別しないようにすることもできます。elseステートメントは出力されて空の文字列になるだけなので、elseステートメントは必要ありません。HEREDOCには追加の</div>タグもあります。オープンとクローズの両方がステートメントENDの内側または外側にあることを確認する必要があります。if

<?php
$referrer = $_SERVER['HTTP_REFERER'];
$my_domain = "example.com";
$search_engines = "google|yahoo|bing|altavista|digg";
$pattern = "((http(s)?:\/\/)(\w+?\.)?(?!{$my_domain})({$search_engines}))";
if (preg_match("/{$pattern}/i", $referrer) != false) {
    echo <<<END
    <script type="text/javascript"><!--
    google_ad_client = "xx-xx-xxxxxxxxxxxxxxxxxx";
    /* xxxxxxxx xxxxxx xxx xxx xxx xx xxxxxx */
    google_ad_slot = "xxxxxxxxxxxxxx";
    google_ad_width = xxx;
    google_ad_height = xxx;
    //-->
    </script>
    <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
    </script>
END;
} else {
    // Show something to visitors not referred by a search engine
}
?>

正規表現パターンの結果は次のようになり、一致は次のようにマークされ*ます。

FALSE - http://example.com/google
FALSE - http://example.com/google.com
FALSE - http://www.example.com/google.com
TRUE  - *http://google*.com/example.com
TRUE  - *http://www1.google*.com/example.com
TRUE  - *http://www.google*.com/example.com
TRUE  - *http://images.google*.com/page
TRUE  - *https://google*.com/example.com
TRUE  - *https://www.google*.com/example.com
于 2012-10-02T15:56:20.710 に答える