Php 我不知道';I don’我不想向Facebook、Twitter访问者展示广告
我现在在facebook上使用这个代码“https”处于活动状态,wordpress站点。Php 我不知道';I don’我不想向Facebook、Twitter访问者展示广告,php,wordpress,http-referer,Php,Wordpress,Http Referer,我现在在facebook上使用这个代码“https”处于活动状态,wordpress站点。 <?php $ref = $_SERVER['HTTP_REFERER']; if (strpos($ref, 'facebook.com') != false) { ?> DON'T SHOW ADS <?php } else { ?> SHOW ADS <?php } ?> 事情不是这样的。如果else查询或“false”是正确的?
<?php
$ref = $_SERVER['HTTP_REFERER'];
if (strpos($ref, 'facebook.com') != false) {
?>
DON'T SHOW ADS
<?php } else { ?>
SHOW ADS
<?php } ?>
事情不是这样的。如果else查询或“false”是正确的?我怎样才能用最简单的方法来做呢?如果访问者来自Facebook、Twitter,我不想显示广告。谢谢。strpos()
不检查要查找的多个“针”。您可以将它们存储在一个数组中
并逐一迭代每一项:
不要展示广告
展示广告
请注意,我还将
strpos
比较更改为==
因为如果位置实际上是0
(字符串的开头),非严格检查可能会导致评估为false。首先,直接从以下位置:
“referer字段是由web浏览器发送到web服务器的HTTP请求的可选部分。”
因此,您应该始终检查请求中是否存在Http引用器。您可以使用来实现这一点!空()
然后还可以实现这一点,而无需使用preg\u match
对数组进行迭代
if(!array_diff(['HTTP_REFERER'], array_keys($_SERVER)))
if(preg_match('/facebook|twitter/', $_SERVER['HTTP_REFERER']))
// todo: disable adverts
您还可以使用null级联运算符
将其缩减为一行。如果您没有从$\u服务器
全局变量进行进一步检查,请执行此操作
if(preg_match('/facebook|twitter/', $_SERVER['HTTP_REFERER'] ?? ''))
// todo: disable adverts
非常感谢。我试过这个代码,但它不能正常工作。它总是显示广告。所以“else”总是出现?您是否确认$\u服务器['HTTP\u REFERER']
在您的测试中确实包含列表中的一个域?愚蠢的我,$ref=$\u服务器['HTTP\u REFERER']代码>当然太低,因此它不包含值。我编辑了我的文章,使其位于顶部,现在应该可以工作了。请注意,HTTP\u REFERER
不需要随请求一起发送。确保在访问它之前检查它不是空的,否则它将抛出异常。如果它是这样工作的。感谢Sprint out$\u服务器['HTTP\u REFERER']
。从Twitter单击指向您的站点的链接。看看打印出来的是什么。相应地调整。(而且,strpos
的工作方式与您认为的不同。)
if(preg_match('/facebook|twitter/', $_SERVER['HTTP_REFERER'] ?? ''))
// todo: disable adverts