我有一个“合作伙伴”列表,他们应该将我的横幅添加到他们的网站上,在他们网站的某个地方...所以我需要检查它,因为它是200多个网站的列表我是在PHP中为它编写脚本。
我的第一个想法,轻松的工作!使用get_file_contents
然后搜索我的横幅,然后搜索网站上的每个链接,并在我的横幅上再次搜索每个页面。
这需要非常长的时间。由于某些网页在其网站上有50多个链接,因此使用get_file_contents
可以获得近200 * 50的网页。
$banners = array(
// All my banner names => banner url's I need to search for
);
$dealers = array(
// all partner names => website url of partner
);
foreach($dealers as $dealer => $url) {
$i = 0;
echo $dealer;
// HTML ophalen van de homepage
$content = file_get_contents($url);
foreach($banners as $banner => $banner_url) {
if(preg_match("/" . $banner_url . "/", $content) == TRUE) {
$i++;
}
}
$stripped_file = strip_tags($content, "<a>");
preg_match_all("/<a(?:[^>]*)href=\"([^\"]*)\"(?:[^>]*)>(?:[^<]*)<\/a>/is", $stripped_file, $matches);
foreach($matches[1] as $match) {
if (strpos($match,'http') !== false) {
$level = file_get_contents($match);
foreach($banners as $banner => $banner_url) {
if(preg_match("/" . $banner_url . "/", $content) == TRUE) {
$i++;
}
}
} else {
$match = $url . $match;
$match = str_replace("//", "/", $match);
$match = str_replace("http:/", "http://", $match);
$match = str_replace("https:/", "https://", $match);
$level = file_get_contents($match);
foreach($banners as $banner => $banner_url) {
if(preg_match("/" . $banner_url . "/", $content) == TRUE) {
$i++;
}
}
}
}
if($i > 0) {
echo " | Banner found <br />";
} else {
echo " | No banner <br />";
}
}
他们是否有任何其他类似spyder的解决方案来加速这个脚本,或者我是否需要设置一个cron并且每隔X秒左右执行一次运行才能一次只做一个网站?
答案 0 :(得分:4)
抓取网站的HTML以查看它是否包含横幅广告并不是最好的解决方法。如果您有2,000个网站应该托管您的横幅,会发生什么?对于PHP脚本和执行该脚本的服务器来说,这是很多工作。
另一种解决方案是使用一个PHP脚本来为您的横幅图像提供服务,但这样做会记录一个已实现的网站视图。因此,您可以看到您的横幅在网站上“最后一次出现”的时间,如果“最近看到”的日期已经很久了,那么这就引起了关注和调查。
示例PHP脚本:
<?php
// banner.php
// log view
// create database connection first
$sql = "INSERT INTO `banner_views` (`domain`) VALUES (:domain)";
$sth = $db->prepare($sql);
$sth->bindParam(':domain', $_SERVER['HTTP_REFERER']);
$sth->execute();
// output image
header('Content-Type: image/gif');
readfile('banner.gif');
exit(;
只需确保您的banner_views
表格中包含timestamp
数据类型的TIMESTAMP
列,并将其默认值设置为CURRENT_TIMESTAMP
,以便您知道横幅广告的时间是“看到”。
答案 1 :(得分:0)
对于wast解决方案,我建议您在递归模式下使用wget从站点下载页面并保存在磁盘上。下载后只需检查页面横幅代码。这与您的解决方案相同,但可以更快