2013-04-30 3 views
0

Я пытаюсь создать скрипт, чтобы проверить, имеет ли веб-страницу обратную ссылку на мою страницу. Я нашел этот скрипт, но проблема в том, что он возвращает сообщение об ошибке «Нет обратной ссылки», даже если есть обратная ссылка. Может ли кто-нибудь сказать мне, что не так с этим скриптом? Вот сценарий, я использую:Php backlink checker на другом сайте

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

Покажите нам элемент 'a' с этой страницы. – Kasyx

+0

@Philippe K спасибо за исправление :) –

+0

@kasyx вот тег на тестовой странице html My Anchor это с http: // но это показ в комментарии –

ответ

0

Я не знаю, как этот метод simple_html_dom.php $ html-> find() работает, потому что никогда не использовал его, но кажется, что ваша проблема есть. Я был бы уверен в хорошем regex 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() работает, потому что, если она соответствует только точным значениям, которые могут быть неприятными.

Смежные вопросы