反向链接检查脚本PHP

时间:2014-06-05 10:21:20

标签: javascript php regex

我有一个脚本来检查页面中是否存在URL。这是:

  class LP_backlinkchecker
  {
  var $url;
  var $content;
  var $links;
  var $linktocheck;

 function __construct($url, $linktocheck)
 {
 $this->url = $url;
 $this->linktocheck = $linktocheck;
 }

 function SetLinktocheck($link)
 {
 $this->linktocheck = $link;
 } 


function getContents()
{
$this->content = file_get_contents($this->url);
} 


function lpFetchLinks()
{
$regexp = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>";
preg_match_all("/$regexp/siU", $this->content, $matches);
$this->links = $matches;
return $matches;
}


function check()
{
 foreach($this->links[2] as $key => $url)
   {
    if($url == $this->linktocheck)return TRUE;
   }
   return FALSE;  
   }

 }

我的问题是该脚本仅适用于检查同一站点上的链接。当要检查的链接在网站之外时,它不起作用。例如,该脚本可以很好地检查链接 http://web.com/linktocheck出现在网站http://web.com/

如果认为我的$ regexp错了,你对这个问题有所了解吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

不确定我是否误解了您的问题,但您的代码似乎对我有用。我给你写了一个小单元测试,你现在可以拥有并扩展,如果你能编写一个不起作用的测试,我可以帮助更多。

class LP_backlinkcheckerTest extends PHPUnit_Framework_TestCase
{
    public $l;

    public function setUp()
    {
        $this->l = new LP_backlinkchecker('test.html', null);
    }

    public function tearDown()
    {
    }

    public function testGetContents()
    {
        $this->l->getContents();
        $this->assertNotEmpty($this->l->content);
    }

    public function testlpFetchLinks()
    {
        $this->l->getContents();
        $matches = $this->l->lpFetchLinks();

        $expected = array(
            "http://google.com",
            "http://www.bluesnews.com",
            "http://www.bluesnews.com/somepage"
        );

        // 4 things captured by the regex
        $this->assertEquals(4, count($matches));
        $this->assertEquals($expected, $matches[2]);
    }
}

和我正在使用的HTML文件

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <a href="http://google.com">Google.com</a>
    <a href="http://www.bluesnews.com">BluesNews.com</a>
    <a href="http://www.bluesnews.com/somepage">somepage</a>
</body>
</html>

虽然最好让你的课程让我不必提供一个文件,但这就是你设计它的方式。我还建议使用parse_url将url分解为它的组成部分。您的问题可能只是您期望一个字符串与另一个字符串相等,并且在构造时可能存在用户输入错误,您根本不会检查。