2012-01-29 21 views
0

我发现这个代码来检查URL上的链接。以前的file_get_contents数据上的PHP多个file_get_contents

<?php 
$url = "http://example.com"; 
$input = @file_get_contents($url); 
$dom = new DOMDocument(); 
$dom->strictErrorChecking = false; 
@$dom->loadHTML($input); 
$links = $dom->getElementsByTagName('a'); 
foreach($links as $link) { 
    if ($link->hasAttribute('href')) { 
     $href = $link->getAttribute('href'); 
     if (stripos($href, 'shows') !== false) { 
     echo "<p>http://example.com" . $href . "</p>\n"; 
     } 
    } 
} 

?> 

工程很好,它显示所有包含'shows'的链接。 例如上面的脚本找到3个环节,所以我得到:

<p>http://example.com/shows/Link1</p> 
<p>http://example.com/shows/Link2</p> 
<p>http://example.com/shows/Link3</p> 

现在,我尝试做的事是检查这些网址我也只是取了一个包含“显示”链接。

说实话,我是一个PHP的菜鸟,所以我不知道从哪里开始:(

问候,巴特

+0

这个脚本是如何运行的?按需求,在计划任务/ cron上? – alex 2012-01-29 23:15:45

+0

**注意:**如果您的深入研究第一页你的报废,你不存储和检查链接的欺骗,那么你可以很容易地陷入无限循环,导致你的脚本陷入服务器和pos让自己被阻止.. – 2012-01-29 23:21:18

回答

2

喜欢的东西:

function checklinks($url){ 
$input = @file_get_contents($url); 
$dom = new DOMDocument(); 
$dom->strictErrorChecking = false; 
@$dom->loadHTML($input); 
$links = $dom->getElementsByTagName('a'); 
foreach($links as $link) { 
    if ($link->hasAttribute('href')) { 
     $href = $link->getAttribute('href'); 
     if (stripos($href, 'shows') !== false) { 
     echo "<p>" . $url . "/" . $href . "</p>\n"; 
     checklinks($url . "/" . $href); 
     } 
    } 
} 
} 

$url = "http://example.com"; 
checklinks($url); 

让它递归 - 在函数本身中再次调用函数