我希望仅向搜索引擎流量展示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 ""
;
}
?>
答案 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