我们有一面旗帜。此横幅位于不同的网站 - 合作伙伴。我们没有这些网站的管理员权限。横幅必须在每个网站上。但是如何控制呢? 它可以手动完成,但如果有方法自动完成它会很棒(特别是当网站列表很大时)。 横幅必须可见。这意味着只检查每个站点上的HTML代码是不够的。必须考虑JavaScript和CSS,因为可以使用这些工具轻松隐藏横幅。 我认为这是一项常见的任务,但我在网上找不到任何东西。任何想法和链接将不胜感激。
答案 0 :(得分:1)
简而言之:没有办法。这意味着 - 您无法确定合作伙伴网站的每位访问者都会100%显示横幅广告。
为什么不可能?
我们可以做些什么?
乍一看,使用PHP HTTP_REFERER
环境变量中的$_SERVER
字段。使用它,您可以检查哪个网站请求您的横幅。让它成为一张图片,这样您就可以轻松执行检查:
function checkReferer($referer)
{
//this could also be retrieved from config or DB:
$clients = [
//client name with available referrers:
'Lorem Ipsum' => ['page1_address.php', 'page2_address.php']
];
//get client:
$client = key(array_filter($clients, function($referrers) use ($referer)
{
return in_array($referer, $referrers);
}));
//perform some DB updates, which set state of $client
}
//some stuff
checkReferer($_SERVER['HTTP_REFERER']);
//sending image:
$image = '/path/to/image.png';
header('Content-Type: image/png');
readfile($image);
exit();
它是如何工作的?它将检索从中请求banner.php
脚本的网页地址。并非所有客户端都会发送此标头(我的意思是HTTP_REFERER
- 它是非强制性的),但在大多数情况下它将包含有效地址。在这种情况下,您可能会依赖于此,因为您的合作伙伴兴趣是正确的(因为您正在检查它们)。因此:当访问者打开您的合作伙伴的网站时,将要求您提供脚本。例如:
<!-- somewhere on partner's side in HTML: -->
<img src='http://your-site.com/banner.php'/>
替代:您可能希望拥有更加稳固的条件。然后,您需要为每个合作伙伴分配一些唯一的代码,并告诉它该代码。您的图片将如下所示:
<img src='http://your-site.com/banner.php?code=codeOfThisPartner'/>
- 在PHP中,您只需在合作伙伴及其代码之间建立1:1
关系:
function checkPartner($code)
{
//this could also be retrieved from config or DB:
$clients = [
'codeOfThisPartner' => 'Lorem Ipsum',
//...
];
//get client:
$client = $clients[$code];
//perform some DB updates, which set state of $client
}
//the rest is the same, code will be in $_GET['code'], obviously
这有什么问题?
如果我们假设客户的浏览器没有停用广告,那么上述方法仅适用于合作伙伴的网站未隐藏横幅的情况。正如你所提到的,可能有javascript隐藏你的横幅。例如,他们可以执行脚本调用,然后将其隐藏在隐藏块中。所以 - 这是一种过滤只有好伙伴的方法。
还可以提出其他哪些方法?
例如,您可以尝试使用cURL请求您的合作伙伴的网页。由于您已经提到过您的横幅广告中有很多合作伙伴的网页,因此您最好使用curl_multi_*来提高查询速度。算法将是:
JavaScript怎么样?
常见答案:没有。有数百种方法可以破坏你的横幅。还有百万种隐藏这一事实的方法,即html / javascript中的某些东西会破坏你的横幅(javascript中的.eval()
,是的)。除非你用javascript引擎编写完整的浏览器仿真,否则你无法自动检查。 html渲染器(甚至在那里很难回答'将该横幅出现在屏幕的正确位置')。如果您不信任您的合作伙伴,那么,不幸的是,您必须手动检查该网站 - 即您只能通过亲眼检查来100%确定。
旁注
您还应该记住,不同的Web浏览器会以不同的方式处理标记。所以在某些情况下,它可能不是“邪恶的伙伴,隐藏你的横幅”的情况,而是一个“不支持功能”X“或功能”Y“e t.c.”的愚蠢浏览器。也许它可能也被视为你伙伴方面的问题,但要明确这一点 - 你应该告诉他,哪些浏览器必须正确显示横幅。
那么,该怎么办?
不可能进行全自动检查并不意味着您不应该做任何事情。您可以执行某些类型的检查,例如上面的建议 - 我认为。这会将你的伴侣分成两部分:那些通过你支票的人和那些失败的人。所以,至少你不必手动检查第一部分 - 因此,这是一种节省时间的方法。第二部分只能手动检查100%确定 - 每个特定的情况应该单独处理,这样你就可以确定你的伴侣是100%的错误。