我正在尝试创建一个脚本来检查网页是否有指向我页面的反向链接。我找到了这个脚本,但问题是它返回错误消息“找不到反向链接”,即使有反向链接。有人能告诉我这个脚本有什么问题吗? 这是我正在使用的脚本:
require('simple_html_dom.php');
function CheckReciprocal( $targetUrl, $checkLinkUrl, $checkNofollow = true )
{
$html = file_get_html($targetUrl);
if (empty($html))
{
//@ Could not load file
return false;
}
$link = $html->find('a[href^='.$checkLinkUrl.']',0);
if (empty($link))
{
//@ Link not found
return false;
}
if ( $checkNofollow && $link->hasAttribute('rel') )
{
$attr = $link->getAttribute('rel');
return (preg_match("/\bnofollow\b/is", $attr) ? false : true);
}
return true;
}
$targetUrl = 'http://example.com/test.html';
$checkLinkUrl = 'http://mysite.com';
if ( CheckReciprocal($test, $checkLinkUrl) )
{
echo 'Link found';
}
else { echo 'Link not found or marked as nofollow'; }
谢谢!
答案 0 :(得分:0)
我不知道simple_html_dom.php的$ html-> find()是如何工作的,因为从未使用它,但似乎你的问题就在那里。我相信好的'DOMDocument +正则表达式。
刚写了一个函数并对其进行了测试,只需在$ url上使用普通域+无论你想要什么,不要担心http(s)或www等等:
function checkBackLink($link, $url, $checkNoFollow = true){
$dom = new DOMDocument();
$dom->loadHTMLFile($link);
foreach($dom->getElementsByTagName('a') as $item){
if($checkNoFollow){
if(preg_match('/nofollow/is', $item->getAttribute('rel'))) continue;
}
if($item->hasAttribute('href') === false) continue;
if(preg_match("#^(https?\://)?(www\.)?$url.*#i", $item->getAttribute('href'))) return true;
}
}
if(checkBacklink('the link', 'example.com')){
echo "link found";
} else {
echo "Link not found or marked as nofollow";
}
如果您不喜欢它并且仍然想使用simple_html_dom,请确保find()的工作原理,因为它只匹配可能很麻烦的确切值。