如何仅向搜索引擎流量展示Google AdSense广告?

时间:2012-10-02 15:47:36

标签: php preg-match adsense http-referer

我希望仅向搜索引擎流量展示Google AdSense广告,不向直接或来自Facebook,Twitter,电子邮件链接等的常规访问者展示广告......

这是我目前使用的代码,它似乎工作正常,但我还希望改进代码,以包括除了谷歌之外的许多其他搜索引擎,如Bing,Yahoo,Ask等。有人会介意看下面的代码并通过改进进行修改?

<?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 ""
;
}
?>

1 个答案:

答案 0 :(得分:3)

代码看起来相当不错。我的建议是使用/而不是(作为模式分隔符,因为parens也可以用于匹配组。您还可以添加i标志以使匹配不区分大小写。不需要你的else语句,因为它只是输出和空字符串。您的</div> HEREDOC中还有一个额外的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