2012-01-29 1 views
0

URL의 링크를 확인하기 위해이 코드를 발견했습니다.PHP가 이전 file_get_contents의 데이터에 여러 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"; 
     } 
    } 
} 

?> 

잘 작동하면 '쇼'가 포함 된 모든 링크가 표시됩니다. 예를 들어 스크립트는 위의 세 링크를 찾을 수, 그래서 내가 얻을 :

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

지금 내가하려고 할 일이 난 그냥 '쇼'를 포함 링크도 가져 해당 URL을 확인하는 것입니다.

내가 PHP를 멍청한 놈, 그래서 어디서부터 시작 :(

안부, 바트를 모르겠어요 솔직히하려면

+0

이 스크립트는 어떻게 실행됩니까? 예약 된 작업/cron에서 – alex

+0

** 참고 : ** 더 깊이 파고 들면 첫 번째 페이지를 스크래핑하고 저장하지 않고 속임수에 대한 링크를 확인하면 무한 루프로 쉽게 빠져 나올 수 있으므로 스크립트가 서버를 멈추게하고 pos가 자신을 차단하게됩니다. –

답변

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); 

가 재귀 확인 - 기능 자체에서 함수를 다시 호출하십시오.